Browse Source

fix(installer): run `chsh` with sudo if user has privileges

This fixes the error in Google Cloud Shell, where a password prompt
appears when running `chsh` but the user (hello) does not have a
password.

If ran with `sudo`, the `chsh` command happens without a password
prompt.
Marc Cornellà 2 years ago
parent
commit
b7a59e6d5c
1 changed files with 13 additions and 4 deletions
  1. 13 4
      tools/install.sh

+ 13 - 4
tools/install.sh

@@ -317,7 +317,7 @@ EOF
     "$YELLOW" "$RESET"
   read -r opt
   case $opt in
-    y*|Y*|"") echo "Changing the shell..." ;;
+    y*|Y*|"") ;;
     n*|N*) echo "Shell change skipped."; return ;;
     *) echo "Invalid choice. Shell change skipped."; return ;;
   esac
@@ -355,11 +355,20 @@ EOF
   if [ -n "$SHELL" ]; then
     echo "$SHELL" > ~/.shell.pre-oh-my-zsh
   else
-    grep "^$USERNAME:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh
+    grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh
   fi
 
-  # Actually change the default shell to zsh
-  if ! chsh -s "$zsh"; then
+  echo "Changing your shell to $zsh..."
+
+  # Check if user has sudo privileges and run `chsh` or `sudo chsh`
+  if LANG= sudo -l -U "$USER" 2>/dev/null | grep -q "is not allowed to run"; then
+    chsh -s "$zsh" "$USER"          # run chsh normally
+  else
+    sudo -k chsh -s "$zsh" "$USER"  # -k forces the password prompt
+  fi
+
+  # Check if the shell change was successful
+  if [ $? -ne 0 ]; then
     fmt_error "chsh command unsuccessful. Change your default shell manually."
   else
     export SHELL="$zsh"