Ich habe ein Shell-Skript, in dem die meisten Befehle ausgeführt werden müssen sesu
Benutzer und dann muss ich einige Befehle als aktueller Benutzer ausführen. Können Sie mir bitte dabei helfen?
Ich habe ein Shell-Skript, in dem die meisten Befehle ausgeführt werden müssen sesu
Benutzer und dann muss ich einige Befehle als aktueller Benutzer ausführen. Können Sie mir bitte dabei helfen?
Antworten:
Wenn Sie das Kennwort nicht jedes Mal angeben möchten, fügen Sie hinzu sesu
zu sudoers
gruppiere und führe den gewünschten Befehl folgendermaßen aus:
sudo su -c "command string"
Diesen Weg command string
läuft als Superuser (root etc).
Der Befehl
exit
Schließt die aktuelle Shell. Wenn Sie eine Shell wie user ausführen X , dann zu einem Benutzer gewechselt Y. , Ausfahrt schließt die Shell, in der Sie waren Y. und bringt dich zum Sein zurück X
Sie können verwenden su
zu einem anderen Benutzer wechseln und die -c
Option zum Ausführen des Befehls, z.
su anotherUser -c "ls /"
Überprüfen Sie, ob Sie haben sudo
und überlegen Sie, ob Sie es in Ihrem Fall verwenden können. Das obige su-Beispiel fragt nach dem Passwort eines anderen Benutzers, was ärgerlich sein kann.
Ich war kürzlich in einer ähnlichen Situation. Folgendes habe ich getan, um sofort beim Aufruf eines Skripts auf die Superuser-Ebene zu wechseln und anschließend normale Benutzeraufgaben auszuführen. Ich denke, es kann Ihnen helfen, einen Weg zu finden, um zur gewünschten Lösung zu gelangen:
#!/bin/bash
# generic_sudo.sh
# Tool that demonstrates in-then-out of sudo
# This demo is pointless if called with 'sudo generic_sudo.sh'
# Need root priviledges for some superuser work
if (( EUID != 0 )); then # If the user is not "root":
# In general one should use ((..)) for testing numbers and integer variables, and [[..]] for testing strings and files.
sudo $0 # Relaunch it as "root".
EXITCODE=$?
printf "su mode OFF.\n" # If we got here, we left superuser mode
printf "EUID is: %d\n" $EUID
printf "Exit code %d\n" $EXITCODE
exit $EXITCODE # Once it finishes, exit gracefully.
else
printf "su mode ON.\n"
fi # End if.
printf "EUID is: %d\n" $EUID
# Some superuser work
printf "Some superuser work was done.\n"
exit 0