私はbashスクリプトを壊そうとしています-とりわけ、sunwaitを開始します:
/root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E; mycommand &
Sunwaitは、特定のコマンドを実行する前に、天文学的なイベントが発生するのを待つバイナリです。スクリプトが他のことを続行できるように、最後にアンパサンドを使用してバックグラウンドに送信しましたが、これは機能せず、理由がわかりません。
シェルで直接コマンドを実行しても、サンウェイトはバックグラウンドに送信されません。私もnohupを試しましたが成功しませんでした。
私はUbuntu14.04サーバーLTSを使用しています。なぜ機能しないのですか?
Sunwaitは、特定のコマンドを実行する前に、天文学的なイベントが発生するのを待つバイナリです。
あなたの構文を調べた後、私はこの解釈が間違っていると思います。あなたの例でsunwait
は何も実行しません。実際、コマンドは与えられていません。私はよく知らないのですsunwait
が、簡単な調査で、天文学的な出来事を待ってから終了することがわかりました。
あなたの場合、それは次のようになります:
;
し、その時点まですべてを実行しsunwait
ます。つまり、コマンドラインオプションを使用します。sunwait
終了するのを待ちます。sunwait
終了するため、シェルはmycommand
アンパサンドのためにバックグラウンドで実行し&
ます。したがって、あなたの質問に対する直接の答えが最も一般的です。それは機能している(あなたが命令したことをしている)ので、「機能している」(あなたが望むことをしていない)ではありません。
修正:
どちらか { /root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E; mycommand; } &
または /root/bin/sunwait sun up -0:00:00 54.453158N 11.013071E && mycommand &
In the first line the two commands inside {}
appear to &
as if it was single command, so everything goes to the background. Simple and often good enough. The second case is slightly different: mycommand
will run if and only if sunwait
finishes without error (unless sunwait
is poorly coded). It is the behavior you expected in the first place, isn't it?. Personally I find the second fix more elegant. Imagine you made a mistake typing mycommand
and realized after a while that it is a ticking bomb. Killing sunwait
will trigger the bomb in 1st scenario, defuse it in 2nd.
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加