2013-07-12 9 views
5

Deshalb möchte ich den Exit-Code eines bestimmten BefehlsExit-Code umgeleiteter Befehl

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 & 

Wie kann ich, ob der Befehl runuser -s /bin/bash @user_name -c $command korrekt ausgeführt finden, um überprüfen? Ich versuchte mit $?, aber es funktioniert nicht, weil es immer 0 ist (das Ergebnis der Umleitung ist 0)

Wie kann ich den Exit-Code dieses Befehls finden?

+0

Ihr Programm im Hintergrund ausgeführt wird. – Antarus

+1

Verunstaltung deine Beiträge nicht. – ChrisF

Antwort

11

Der Exit-Code ist auf die Backgrounding der Aufgabe nicht zur Verfügung (über &), nicht die Umleitung.

Sie sollten wait verwenden, um den Exit-Code einer Hintergrundaufgabe zu erhalten.

Wartebefehl Stop-Skript, bis alle Jobs in Hintergrund laufen haben beendet, oder bis die Auftragsnummer oder Prozess-ID als Option angegeben wird beendet. Es gibt den Exit-Status wait-for-Befehl zurück.

+0

Was wäre, wenn das Programm nicht im Hintergrund läuft, Brian? Könnte ich auch einen Exit-Code bekommen? –

3

Sie können $! in bash verwenden, um die PID des letzten Hintergrundprozesses zu erhalten. Dann können Sie wait pid tun. Dies wartet, bis der Prozess mit PID abgeschlossen ist.

Also für Ihren Skript können Sie etwas tun:

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 & 
myPid=$! 
wait $myPid 
status=$? 
echo "Exit status of the process with pid: $myPid is $status" 
Verwandte Themen