Ich möchte ein Shell-Skript schreiben, um eine Reihe von Befehlen zu automatisieren. Das Problem ist, dass einige Befehle als Superuser ausgeführt werden müssen und einige Befehle NICHT als Superuser ausgeführt werden dürfen. Was ich habe, ist bisher getan etwas wie folgt aus:Wie schreibe ich ein Shell-Skript, das einige Befehle als Superuser und einige Befehle nicht als Superuser ausführt, ohne es zu babysitten?
#!/bin/bash
command1
sudo command2
command3
sudo command4
Das Problem ist, bedeutet dies, jemand warten muss, bis command1 beendet ist, bevor sie nach einem Passwort gefragt werden, dann, wenn command3 lange genug dauert, werden sie dann muss warten bis command3 fertig ist. Es wäre schön, wenn die Person aufstehen und gehen könnte, dann eine Stunde später zurückkommen und fertig sein würde. Zum Beispiel hat das folgende Skript dieses Problem:
#!/bin/bash
sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"
Wie kann ich es machen, so dass der Benutzer sein Passwort nur einmal eingeben, ganz am Anfang, und dann zu Fuß zu erreichen?
Update:
Danke für die Antworten. Ich laufe auf Mac OS X Lion und lief Skripts Stephen P und bekam unterschiedliche Ergebnisse: (Ich habe auch $ HOME)
[email protected] scratch$ ./test2.sh
uid is 501
user is pair
username is
home directory is /Users/pair
[email protected]bbey scratch$ sudo ./test2.sh
Password:
uid is 0
user is root
username is root
home directory is /Users/pair
Sie können auch eine Schale machen Skript, das root gehört und das Bit "suid" gesetzt hat, aber das kann gefährlich sein, wenn Sie es nicht richtig machen. Jedes Mal, wenn Sie Shell-Skripte als root ausführen, sollten Sie in Erwägung ziehen, 'trap' zu verwenden, um Signale zu verarbeiten. http://www.shelldorado.com/goodcoding/tempfiles.html hat einige Beispiele. –
Komisch, ich bekomme tatsächlich unterschiedliche Ergebnisse. Dies ist auf Mac OS X Lion: 'Paar @ Abtei Kratzer $/test2.sh'
' uid ist 501'
'Benutzer ist pair'
' username is '
' Home-Verzeichnis/Users/Paar. '
' Paar @ Abtei Grund auf neu $ sudo ./test2.sh '
' Passwort: '
' uid ist 0'
'Benutzer ist root'
' username is root'
'Home-Verzeichnis/Benutzer/Paar
'Paar @ Abtei Scratch $ Sudo -u Paar ./test2.sh'
'Uid ist 501'
'Benutzer
pair' ist' username is pair'
'Home-Verzeichnis/Users/pair'
– speedarius
Sorry für die Formatierung des obigen Kommentars; Ich aktualisiere den ursprünglichen Post jetzt. – speedarius