- ベストアンサー
Cshellスクリプトで前の命令の実行を待って次のことを行う
入力を必要とする二つのコマンドがあり、 両方とも COMMAND1 <<"(2) $AAA $BBB (1) COMMAND2 <<" $AAA $BBB の形で単独では動作しますが、一度に実行するとエラーを起こします。 実際にはCOMMAND2はCOMMAND1の実行後行わなければならないので、 実行終了まで待たないといけないのでエラーを発生します。 そこで前の命令の実行終了を待って次の命令を行いたいのですが、 いい方法はありますか。 【やってダメだった方法】 ・(1)(2)の位置に「&&」を入れる ・(1)の位置に$?が0の間動き続けるwhileループを挿入する ・1の部分、2の部分を両方とも別のスクリプトにして その両方のスクリプト起動命令同士を「&&」で結ぶ
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
COMMAND1の方が、バックグラウンド動作するようになっているのかも。で、処理の最中だけど、すぐにCOMMAND2の実行が始まっているのではないかしら。 だとしたら、COMMAND1の具体的な処理の中身を知らないと、終了判定のコードを書くのは難しいかも。 COMMAND1がシェルスクリプトなら、それを適当に改造するとかできるんですけど。 まあ、適当に思い付く方法といえば、psから該当するコマンドのエントリを拾ってきて、そいつをループで監視するとか、 COMMAND1終了時に端末に文字を出すなら、そいつをコマンドexpectを使って検出するとか。
その他の回答 (1)
例示なさっているスクリプトが私にはよくわからないのですが、それはさておき、安直な対処をあげますと「sleep」を使うというのはいかがでしょう? 例えば(1)のところに sleep 10 と書くと、そこで10秒間停止します。10の代わりにいろいろな数を試して、通常COMMAND1の処理にかかる最低限の時間より少し長く停止するようにすれば、うまくいくと思います。
お礼
最終手段として使えそうです。ありがとうございました。
補足
ちなみにやってダメだった方法は文法に間違いはなかったでしょうか。 Bシェルのページを見てやったのでCシェルだと実は違う、とか。
お礼
コマンド自体は私も詳しくは分かりません。 そこがややこしくしている原因なのですが。 単独で動いているのを見ていると実行終了までプロンプトが出てこないので バックグラウンド動作はしていないと思うのです。
補足
スクリプトの実行結果を見て、 方法としては完全に結局こうなりました。 プログラム終了後に最後に「done」が出力されるので これをまって次のプログラムを起動させればいい。 一寸質問の形が違ってきそうなので、 改めて質問立てする事にします。ありがとうございました。