Wenn Sie geben diese
su www-data whatever something-else exit
su
Startet eine zusätzliche Shell als www-data
Benutzer. Dann tippen Sie fortlaufende Befehle, die in dieser Shell ausgeführt werden, sodass exit
Sie zur alten Shell zurückkehren.
Wenn sich diese Befehle in einem Skript befinden, whatever
werden sie nicht in der zusätzlichen Shell ausgeführt. Die ursprüngliche Shell wartet, su
bis sie beendet wird, bevor sie whatever
weitergeht. Wenn Sie ein solches Skript (eine Datei wie script.sh
mit korrektem Shebang) vom Terminal aus ausführen, werden Sie zu einer interaktiven Shell geleitet. Geben Sie exit
dort von Hand ein, um mit dem Skript fortzufahren.
In einem Bootstrap-Skript ist jetzt kein TTY angehängt, es su www-data
kann keine interaktive Shell gestartet werden und wird sofort beendet. Der Rest des Skripts wird ausgeführt (offensichtlich nicht als www-data
Benutzer). und wenn es exit
irgendwo ist, wird das Skript beendet.
Der sauberste Weg, um damit umzugehen, ist das Einfügen von whatever
und something-else
in ein separates Hilfsskript, das Sie dann in Ihrem Hauptskript aufrufen können
su www-data -c "/path/to/the/helper/script"
Das Hauptskript wartet, su
bis es beendet wird. In diesem Fall wird jede folgende Zeile vom ursprünglichen Benutzer ausgeführt.
Ein anderer Weg ist wie folgt:
su www-data -c 'whatever; something-else'
oder gleichwertig
su www-data -c ' whatever something-else '
Der letztere Ansatz kann mühsam sein, wenn die Befehle zitiert werden müssen. Es gibt kein solches Problem mit einem zusätzlichen Skript.