2017-05-16 16 views
1

bashスクリプトStartSomething.shを特定のユーザーとして実行します。私はrunuserコマンドを使っています。また、このbashスクリプトから終了コードを知りたい。したがって、コマンドが終了または中断されたときにファイルに終了コードを書きます。コードは次のとおりです。runuserコマンドから終了コードを伝播する

bashスクリプトが中断されても、終了コードはまだ0です。何が間違っていますか?

私はこのコードを別のファイル、start.sh、持っている場合:

./StartSomething.sh --pidfile=${pidfile} echo $? > ${statusfile}

とrunuserコマンドを次のようになります。

runuser myuser -s /bin/bash -c "./start.sh" &

すべてが正常に動作しています。私は別のファイルなしで最初の例を使用したい。誰かが間違っていることを教えてもらえますか?この問題の解決策はありますか?

+0

スクリプトを中断するにはどうすればよいですか? – 123

+0

私はkill -11 $(pgrep StartSomething.sh)を使用します – peteruherek

+0

これは詳しい情報なしでは解決できないと思います。変数 'pidfile'と' statusfile'をどこかに設定したと仮定すると、その内容は何ですか? 'echo"とは何かエンドコード:$ {end} "'あなたに? –

答えて

1

あなたがしたいのは、バックグラウンドでプログラムを実行し、それが完了するのを待つ場合、私はwaitを使用して戻り値を得ることができると思います(何か例外が起きない限り、runuserが通過します)。

runuser myuser ./StartSomething.sh --pidfile=${pidfile} & 
pid=$! 
# do something else 
wait $! 
echo "it returned $?" 

または

runuser myuser ./StartSomething.sh --pidfile=${pidfile} & 
pid=$! 
echo -n "waiting" 
while kill -0 $pid 2>/dev/null; do 
    echo -n "." 
    sleep 1 
done 
echo 
wait $! 
echo "it returned $?" 
1

特殊文字$をエスケープするときに問題があります。正しいコマンド:

runuser myuser -s /bin/bash -c "./StartSomething.sh --pidfile=${pidfile}; \ 
           echo \$? > ${statusfile};" & 

\$?$?を交換してください。