2013-07-12 25 views
5

だから、私は、コマンドrunuser -s /bin/bash @user_name -c $commandが正しく実行されたかどうかを見つけることができますどのように特定のコマンドの終了コード終了コード

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

を確認したいですか? $?を使用しようとしましたが、常に0(リダイレクトの結果は0)のため動作しません。

このコマンドの終了コードはどのようにして見つけることができますか?

+0

は、だからあなたのスクリプトのためにあなたは、このような何かを行うことができます。 – Antarus

+1

投稿を改ざんしないでください。 – ChrisF

答えて

11

タスクのバックグラウンド(&経由)、ではなく、のリダイレクトのため、終了コードは利用できません。

waitを使用して、バックグラウンドタスクの終了コードを取得する必要があります。 バックグラウンドで実行されているすべてのジョブまで

待機コマンド停止スクリプトの実行が終了している、またはジョブ番号またはプロセスID として指定されるまで、オプションが終了します。それは 待機コマンドの終了ステータスを返します。

+0

プログラムがバックグラウンドで実行されない場合、Brian?終了コードも取得できますか? –

3

最後のバックグラウンドプロセスのPIDを取得するには、$!をbashで使用できます。その後、wait pidを実行できます。これは、pidを持つプロセスが完了するまで待機します。あなたのプログラムがバックグラウンドで実行されている

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"