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.shSkript 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 nvmals Nicht-Root-Benutzer. Nach der nvmInstallation müssen Sie sich abmelden und erneut anmelden, um die Aktivierung zu aktivieren nvm. Ich erstelle daher einen Nicht-Sudo-Benutzer mit dem Namen meteorund möchte beim Herunterladen und Installieren darauf wechseln nvm.
Anschließend möchte ich wieder zu Sein wechseln rootund mich sofort als anmelden meteor, um mit nvmder 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 bashStartet einfach Bash als Meteor, es kann nicht einfach den Rest des Skripts übernehmen.