Don't rely on Bash in post-up hook

In 16219a31db we implemented a post-up
hook that checked for a problematic `/etc/zshenv` file. OSX/macOS has
changed the file responsible for executing `path_helper` and loading the
system paths multiple times, and this script change issued a warning to
users if `path_helper` might be called in such a way that their paths
could be unexpectedly reordered.

The script used colored output to highlight this problem for the user,
and relied on Bash's script path introspection (through `$BASH_SOURCE`)
to print the location of the `post-up` hook to assist the user in
troubleshooting and understanding where our warning came from.

This change removes the hook's reliance on GNU Bash in favor of `sh`. It
uses the POSIX-compliant `$0` to determine the hook location (this
method is less robust than Bash's `$BASH_SOURCE`, but is available in
all POSIX shells) and removes colored output in the warning to be
compatible with shells that don't support colored output.

Fix #517.
This commit is contained in:
Geoff Harcourt 2017-05-01 16:43:54 -04:00
parent 336a282602
commit 06197218c7

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
touch "$HOME"/.psqlrc.local touch "$HOME"/.psqlrc.local
@ -12,31 +12,15 @@ reset -Q
# detect old OS X broken /etc/zshenv and suggest rename # detect old OS X broken /etc/zshenv and suggest rename
if grep -qw path_helper /etc/zshenv 2>/dev/null; then if grep -qw path_helper /etc/zshenv 2>/dev/null; then
if [ -t 2 ]; then dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
fg_red=$'\e[31m'
fg_bold_white=$'\e[1;37m'
reset_color=$'\e[m'
else
fg_red=""
fg_bold_white=""
reset_color=""
fi
# resolve BASH_SOURCE to absolute path
bash_source="$BASH_SOURCE"
if [[ $bash_source == */* ]]; then
pushd "${bash_source%/*}" >/dev/null
bash_source="${PWD}/${bash_source##*/}"
popd >/dev/null
fi
cat <<MSG >&2 cat <<MSG >&2
${fg_red}Warning:${reset_color} \`/etc/zshenv' configuration file on your system may cause unexpected Warning: \`/etc/zshenv' configuration file on your system may cause unexpected
PATH changes on subsequent invocations of the zsh shell. The solution is to PATH changes on subsequent invocations of the zsh shell. The solution is to
rename the file to \`zprofile': rename the file to \`zprofile':
${fg_bold_white}sudo mv /etc/{zshenv,zprofile}${reset_color} sudo mv /etc/{zshenv,zprofile}
(called from ${bash_source}:${LINENO}) (called from ${dir}/post-up:${LINENO})
MSG MSG
fi fi