2013-07-12 10 views
5

Quindi voglio verificare il codice di uscita di un comando specificoCodice di uscita di comando reindirizzate

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

Come posso trovare se il comando runuser -s /bin/bash @user_name -c $command eseguito correttamente? Ho provato a utilizzare $? ma non funziona perché è sempre 0 (il risultato del reindirizzamento è 0)

Come posso trovare il codice di uscita di tale comando?

+0

il programma è in esecuzione in background. – Antarus

+1

Non sfigurare i tuoi post. – ChrisF

risposta

11

Il codice di uscita non è disponibile a causa dello sfondo dell'attività (tramite &), non il reindirizzamento.

È necessario utilizzare wait per ottenere il codice di uscita di un'attività in background.

attesa di arresto comando l'esecuzione dello script finché tutti i job in esecuzione in background non sono terminati , o fino a quando il numero del lavoro o il processo id specificato come opzione. Restituisce lo stato di uscita del comando in attesa di .

+0

E se il programma non fosse in esecuzione in background, Brian? Posso ottenere anche il codice di uscita? –

3

È possibile utilizzare $! in bash per ottenere il pid dell'ultimo processo in background. Quindi puoi fare wait pid. Questo attende che il processo con pid sia completo.

Così per lo script si può fare qualcosa di simile:

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"