Das Problem
In einem Bash-Skript verwende ich den Befehl ...
sudo -u node bash
.., um von root zu einem Nicht-Sudo-Benutzer zu wechseln, und dies schlägt fehl.
Der Kontext
Ich schreibe ein provision.sh
Skript für Vagrant, um einen Server unter Ubuntu 16.04.3 mit allen Paketen einzurichten, die für die Bereitstellung einer App mit Meteor 1.6 erforderlich sind.
Ein erforderlicher Schritt ist die Installation nvm
als Nicht-Root-Benutzer. Nach der nvm
Installation müssen Sie sich abmelden und erneut anmelden, um die Aktivierung zu aktivieren nvm
. Ich erstelle daher einen Nicht-Sudo-Benutzer mit dem Namen meteor
und möchte beim Herunterladen und Installieren darauf wechseln nvm
.
Anschließend möchte ich wieder zu Sein wechseln root
und mich sofort als anmelden meteor
, um mit nvm
der Installation von Node.js zu beginnen.
Unten finden Sie ein stark kommentiertes Skript. Vagrant führt dieses Skript jedes Mal aus, wenn ich anrufe vagrant reload --provision
.
Welchen Befehl soll ich anstelle verwenden sudo -u node bash
?
echo "# whoami" && whoami && echo "^^^^ root expected"
echo "As root, create non-sudo user meteor:"
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass meteor
echo "User meteor created. ls -al /home/meteor:"
ls -al /home/meteor
echo "Install curl as root:"
apt-get install -y curl
echo "Trying sudo -u meteor bash"
sudo -u meteor bash #### THIS IS THE LINE THAT FAILS ###
echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
echo "ls -al /home/meteor/.nvm # should be populated"
ls -al /home/meteor/.nvm
echo "ls -al /root/.nvm # should not exist"
ls -al /root/.nvm
echo "command -v nvm will fail silently until we log out and back in again"
#command -v nvm
exit
#### Because the script is still running as root, it halts here ####
echo "# whoami" && whoami && echo "^^^^ should be root"
sudo -u meteor bash
echo "$ whoami" && whoami && echo "^^^^^^ should be meteor"
echo "command -v nvm should work now"
command -v nvm
sudo -u meteor bash
Startet einfach Bash als Meteor, es kann nicht einfach den Rest des Skripts übernehmen.