Bash Script "exec" Befehl unterbricht Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tilloo3
Beiträge: 43
Registriert: 04.05.2013 17:21:04

Bash Script "exec" Befehl unterbricht Script

Beitrag von tilloo3 » 29.10.2014 13:51:32

Hallo Leute,

ich bin ein Anfänger in Bash und habe momentan ein Problem mit dem exec Befehl
Hier erstmal mein Code

Code: Alles auswählen

function testscript
{
exec pssh -h /etc/dsh/server.txt screen -d -m testprogramm -bla --blub 
read -p "Stop the Script ? ?(Y/y)" stop
case "$stop" in
y|Y ) exec pnuke -l root -h /etc/dsh/server.txt screen ;
esac
}
Nach dem ersten Exec wir das Bash Script sofot beendet weil eine Ausgabe von PSSH kommt das der Befehl erfolgreich war.
Wie kann ich das umgehen und das Script weiterluafen lassen ?

Danke im Vorraus

uname
Beiträge: 12402
Registriert: 03.06.2008 09:33:02

Re: Bash Script "exec" Befehl unterbricht Script

Beitrag von uname » 29.10.2014 15:50:04

Normalerweise werden Prozesse wie "pssh" vom bash-Prozess als Kindsprozess abgespalten. Bei "exec" wird der Prozess übernommen. Sobald "pssh" beendet wird ist somit der ganze Prozess nicht mehr existent. Das ist schlecht. Der ganze Ansatz ist wohl eher falsch.

Nicht probiert:

Code: Alles auswählen

function testscript
{
pssh -h /etc/dsh/server.txt screen -d -m testprogramm -bla --blub
pid=$!
read -p "Stop the Script ? ?(Y/y)" stop
case "$stop" in
y|Y ) kill $pid
esac
}
Bin mir gerade unsicher ob hinter dem pssh-Zeug noch ein & stehen muss. Auch habe ich die case-Syntax nur übernommen und nicht überprüft.
Auch glaube ich, dass das pssh-Script recht schnell durchläuft, da ja die screen-Sitzungen alle detacht werden. Damit weißt du am Ende nicht mehr auf welchen Servern überall die Software läuft.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Bash Script "exec" Befehl unterbricht Script

Beitrag von Cae » 29.10.2014 16:18:52

tilloo3 hat geschrieben:Nach dem ersten Exec wir das Bash Script sofot beendet weil eine Ausgabe von PSSH kommt das der Befehl erfolgreich war.
Nein, exec bzw. der zugehoerige Syscall execve ersetzen den aktuellen Prozess mit einem neu gestarteten. D.h. der bash-Prozess ist ab dem exec nicht mehr existent, daher kann weitere Logik auch nicht bearbeitet werden.

In beiden Faellen willst du kein exec, das scheint ein Verstaendnisproblem zu sein. Die Shell fuehrt Befehle einfach aus, du brauchst da kein explizites sytem() oder so.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

uname
Beiträge: 12402
Registriert: 03.06.2008 09:33:02

Re: Bash Script "exec" Befehl unterbricht Script

Beitrag von uname » 29.10.2014 16:26:28

Stimmt. Exec ist hier falsch und wird keinesfalls benötigt. Ohne & sollte wohl auch die Zeile unterhalb von "pssh" nicht vor dem Ende von "pssh"erreicht werden, da die Shell bzw. das Script entsprechend wartet. Danach bringt jedoch auch die Abfrage rein gar nichts mehr. Vielleicht einfach nur "pssh" aufrufen und das Beenden z.B. per CTRL-c erzwingen.

tilloo3
Beiträge: 43
Registriert: 04.05.2013 17:21:04

Re: Bash Script "exec" Befehl unterbricht Script

Beitrag von tilloo3 » 29.10.2014 17:50:36

Vielleicht einfach nur "pssh" aufrufen und das Beenden z.B. per CTRL-c erzwingen.
Das Problem ist nur das mir pssh immer diese Meldung hier rausgibt:

Code: Alles auswählen

[1] 17:46:31 [SUCCESS] root@192.168.100.3:22
[2] 17:46:31 [SUCCESS] root@192.168.100.4:22
sobald ein Befehl erfolgreich war und ich wieder in der Kommandozeile lande ...

Antworten