diff options
| author | Marc Cornellà <marc.cornella@live.com> | 2019-05-24 17:05:20 +0200 | 
|---|---|---|
| committer | Marc Cornellà <marc.cornella@live.com> | 2019-06-03 17:18:24 +0200 | 
| commit | a6a093ba2aed292f0610110c0e787aca57288319 (patch) | |
| tree | 106822b6968abd01a5c0ee278a8ed52aad1b92e4 /tools | |
| parent | 9d2b3ce79f9f7eaf989eb4606c36f84ee8eb1cfb (diff) | |
| download | zsh-a6a093ba2aed292f0610110c0e787aca57288319.tar.gz zsh-a6a093ba2aed292f0610110c0e787aca57288319.tar.bz2 zsh-a6a093ba2aed292f0610110c0e787aca57288319.zip | |
installer: improve zsh binary path search in setup_shell
This changes the behavior to default to the binary found first in $PATH,
then checking it's actually in the shells file (/etc/shells).
If that fails go back to the previous behavior, but actually check that
the path obtained exists in the filesystem.
Co-authored-by: Joel Kuzmarski <leoj3n@gmail.com>
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/install.sh | 13 | 
1 files changed, 12 insertions, 1 deletions
| diff --git a/tools/install.sh b/tools/install.sh index 8ec973832..f91e02954 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -117,7 +117,18 @@ setup_shell() {  		return  	fi -	if ! chsh -s $(grep '^/.*/zsh$' "$shells_file" | tail -1); then +	# Get the path to the right zsh binary +	# 1. Use the most preceding one based on $PATH, then check that it's in the shells file +	# 2. If that fails, get a zsh path from the shells file, then check it actually exists +	if ! zsh=$(which zsh) || ! grep -qx "$zsh" "$shells_file"; then +		if ! zsh=$(grep '^/.*/zsh$' "$shells_file" | tail -1) || [ ! -f "$zsh" ]; then +			error "no available zsh binary found. Change your default shell manually." +			return +		fi +	fi + +	# Actually change the default shell to zsh +	if ! chsh -s "$zsh"; then  		error "chsh command unsuccessful. Change your default shell manually."  	fi  } | 
