Browse Source

installer: allow chsh to work in termux

Marc Cornellà 4 years ago
parent
commit
fd4571d1b0
1 changed files with 25 additions and 17 deletions
  1. 25 17
      tools/install.sh

+ 25 - 17
tools/install.sh

@@ -165,29 +165,37 @@ setup_shell() {
 		*) echo "Invalid choice. Shell change skipped."; return ;;
 	esac
 
-	# Test for the right location of the "shells" file
-	if [ -f /etc/shells ]; then
-		shells_file=/etc/shells
-	elif [ -f /usr/share/defaults/etc/shells ]; then # Solus OS
-		shells_file=/usr/share/defaults/etc/shells
-	else
-		error "could not find /etc/shells file. Change your default shell manually."
-		return
-	fi
+	# Check if we're running on Termux
+	case "$PREFIX" in
+		*com.termux*) termux=true; zsh=zsh ;;
+		*) termux=false ;;
+	esac
 
-	# 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 zsh binary found or not present in '$shells_file'"
-			error "change your default shell manually."
+	if [ "$termux" != true ]; then
+		# Test for the right location of the "shells" file
+		if [ -f /etc/shells ]; then
+			shells_file=/etc/shells
+		elif [ -f /usr/share/defaults/etc/shells ]; then # Solus OS
+			shells_file=/usr/share/defaults/etc/shells
+		else
+			error "could not find /etc/shells file. Change your default shell manually."
 			return
 		fi
+
+		# 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 zsh binary found or not present in '$shells_file'"
+				error "change your default shell manually."
+				return
+			fi
+		fi
 	fi
 
 	# We're going to change the default shell, so back up the current one
-	if [ -n $SHELL ]; then
+	if [ -n "$SHELL" ]; then
 		echo $SHELL > ~/.shell.pre-oh-my-zsh
 	else
 		grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh