kann ich/su Benutzer mitten in einem Skript ändern?kann ich 'su' mitten in einem Bash-Skript ausführen?
Antwort
Sie können, aber bash wird nicht die nachfolgenden Befehle als Postgres ausführen. Stattdessen tun:
su postgres -c 'dropdb $user'
Die -c
Flagge führt einen Befehl als Benutzer (siehe man su
).
danke @Mark Trapp – Radek
Sie möchten doppelte Anführungszeichen verwenden dort: 'su postgres -c "dropdb $ user" ' –
Sie können mehrere Zeilen einfügen, wenn das Schlussangebot in einer anderen Zeile steht. Zitieren Sie in diesem Fall. –
Nein, du kannst nicht. Oder atleast ... Sie können su, aber su wird zu diesem Zeitpunkt einfach eine neue Shell öffnen und wenn es fertig ist, wird es mit dem Rest des Skripts fortfahren.
Ein Weg, um es ist su -c 'some command'
zu verwenden, nicht so. su
ruft einen Prozess auf, der standardmäßig auf eine Shell verweist. In der Befehlszeile ist diese Shell interaktiv, sodass Sie Befehle eingeben können. Im Kontext eines Skripts wird die Shell sofort beendet (weil sie nichts zu tun hat).
Mit
su user -c command
command
wird als user
ausgeführt werden - wenn die su
erfolgreich ist, was der Fall mit einem Passwort weniger Nutzer in der Regel nur ist oder wenn das Skript als root ausgeführt wird.
Verwenden Sie sudo
für einen besseren und feinkörnigeren Ansatz.
Eine weitere interessante Idee, die ich heute gehört habe, ist ein rekursiver Aufruf des Skripts, wenn Sie als root ausgeführt werden und das Skript als ein anderer Benutzer ausführen möchten. Siehe nachstehendes Beispiel:
Ich betreiben Skript „my_script“ als „root“ und will das Skript als Benutzer ausführen „raamee“
#!/bin/bash
#Script name is: my_script
user=`whoami`
if [ "$user" == "root" ]; then
# As suggested by glenn jackman. Since I don't have anything to run once
# switching the user, I can modify the next line to:
# exec sudo -u raamee my_script and reuse the same process
sudo -u raamee my_script
fi
if [ "$user" == "raamee" ]; then
#put here the commands you want to perform
do_command_1
do_command_2
do_command_3
fi
Wenn Sie nichts zu tun haben, nachdem "raamee" funktioniert, dann können Sie: 'exec sudo -u raamee my_script' - das den aktuellen Prozess ersetzt, anstatt es herumzuhängen. –
Clever, aber ein hier Dokument ist einfacher (siehe meine Antwort). –
Eine Sache, die dabei zu beachten ist, ist, dass der Benutzer sudo'd (wenn nicht root) Berechtigungen zum Ausführen des Skripts selbst haben muss. –
Sie ein here document mehr einbetten können su
in Ihrem Skriptbefehle:
if [ "$user" == "" ]; then
echo "Enter the table name";
read user
fi
gunzip *
chown postgres *
su postgres <<EOSU
dropdb $user
psql -c "create database $user with encoding 'unicode';" -U dbname template1
psql -d $user -f *.sql
EOSU
Seien Sie vorsichtig, ich denke, dass einige Zeichen, wie Backtick, geflüchtet werden müssen, wenn Sie sie in ein hier Dokument einfügen. –
zu Antworten in Frage unten siehe,
Sie können zwischen < < EOF und EOF wie in den Antworten erwähnt schreiben.
#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
How do I use su to execute the rest of the bash script as that user?
Fügen Sie -si zu sudo hinzu, um die Umgebung eines Benutzers zu erhalten. –
- 1. Bash-Skript Ausführen su-Befehl
- 2. Wie kann ich ein Passwort auf Sudo in einem einzigen Zeilenbefehl anwenden und su root ausführen?
- 3. su und sudo in einem Shell-Skript
- 4. Wie Sudo Su von PHP-Skript ohne Passwort ausführen?
- 5. MYSQL - Server wird mitten in einem Skript beendet
- 6. Befehl ausführen, wenn su für einen bestimmten Benutzer
- 7. Aufruf von su in Emacs Eshell
- 8. .NET SSH pbrun su
- 9. Kann ich eine Rake-Task in einem Generator ausführen?
- 10. Fehler mitten in Android Studio Installation
- 11. su: Berechtigung verweigert Fehler
- 12. Warum wit.ai Bot mitten im Konversationsfluss springt?
- 13. Ich kann nuttcp nicht in Docker ausführen
- 14. Kann ich LocalDb "in-memory" ausführen
- 15. Kann ich setTimeout/setInterval in $ .submit() ausführen?
- 16. Kann ich ein Benutzer system mit 'systemctl --user' nach sudo su - myuser steuern?
- 17. Befehl ausführen als anderer Benutzer in Linux mit `su - Benutzer c` erstellt einen doppelten Prozess
- 18. Anmelden mit 'su' Befehl in einer Zeile
- 19. Wie net-ssh sudo su in Ruby
- 20. Capistrano mit nur 'sudo su - user' erlaubt
- 21. Fehler bei der Verwendung von "su" -Befehl
- 22. Wie kann ich Code mit einem Compilor ausführen
- 23. su: Kann keinen Eintrag für die angegebene Sitzung erstellen/entfernen
- 24. Kann ich Django-Tests (manage.py) aus einem anderen Verzeichnis ausführen?
- 25. Kann ich Visual Studio 2010 von einem Flash-Laufwerk ausführen?
- 26. Wie kann ich __main__ von einem anderen Python-Modul ausführen?
- 27. Wie kann ich IntelliJ IDEA auf einem Remote-Desktop ausführen
- 28. Kann ich eine Verbindung nach einem preventDefault() ausführen?
- 29. Wie kann ich Aufgaben an einem bestimmten Datum ausführen lassen?
- 30. Kann ich ipython-Skripte ausführen?
möglich Duplikat [Wie verwende ich so den Rest der Bash-Skript als dieser Benutzer ausführen?] (Http://stackoverflow.com/questions/1988249/how-do- ich-benutze-su-um-den-Rest-des-Bash-Skript-als-das-Benutzer auszuführen) –