浏览代码

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>
Marc Cornellà 5 年之前
父节点
当前提交
a6a093ba2a
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      tools/install.sh

+ 12 - 1
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
 }