プロが教えるわが家の防犯対策術!

入力を必要とする二つのコマンドがあり、
両方とも
COMMAND1 <<"(2)
$AAA
$BBB

(1)

COMMAND2 <<"
$AAA
$BBB

の形で単独では動作しますが、一度に実行するとエラーを起こします。
実際にはCOMMAND2はCOMMAND1の実行後行わなければならないので、
実行終了まで待たないといけないのでエラーを発生します。

そこで前の命令の実行終了を待って次の命令を行いたいのですが、
いい方法はありますか。

【やってダメだった方法】
・(1)(2)の位置に「&&」を入れる
・(1)の位置に$?が0の間動き続けるwhileループを挿入する
・1の部分、2の部分を両方とも別のスクリプトにして
その両方のスクリプト起動命令同士を「&&」で結ぶ

A 回答 (2件)

COMMAND1の方が、バックグラウンド動作するようになっているのかも。

で、処理の最中だけど、すぐにCOMMAND2の実行が始まっているのではないかしら。

だとしたら、COMMAND1の具体的な処理の中身を知らないと、終了判定のコードを書くのは難しいかも。
COMMAND1がシェルスクリプトなら、それを適当に改造するとかできるんですけど。

まあ、適当に思い付く方法といえば、psから該当するコマンドのエントリを拾ってきて、そいつをループで監視するとか、
COMMAND1終了時に端末に文字を出すなら、そいつをコマンドexpectを使って検出するとか。

この回答への補足

スクリプトの実行結果を見て、
方法としては完全に結局こうなりました。

プログラム終了後に最後に「done」が出力されるので
これをまって次のプログラムを起動させればいい。

一寸質問の形が違ってきそうなので、
改めて質問立てする事にします。ありがとうございました。

補足日時:2002/08/20 17:37
    • good
    • 0
この回答へのお礼

コマンド自体は私も詳しくは分かりません。
そこがややこしくしている原因なのですが。

単独で動いているのを見ていると実行終了までプロンプトが出てこないので
バックグラウンド動作はしていないと思うのです。

お礼日時:2002/08/20 08:32

 例示なさっているスクリプトが私にはよくわからないのですが、それはさておき、安直な対処をあげますと「sleep」を使うというのはいかがでしょう?


 例えば(1)のところに
  sleep 10
と書くと、そこで10秒間停止します。10の代わりにいろいろな数を試して、通常COMMAND1の処理にかかる最低限の時間より少し長く停止するようにすれば、うまくいくと思います。

この回答への補足

ちなみにやってダメだった方法は文法に間違いはなかったでしょうか。
Bシェルのページを見てやったのでCシェルだと実は違う、とか。

補足日時:2002/08/20 08:33
    • good
    • 0
この回答へのお礼

最終手段として使えそうです。ありがとうございました。

お礼日時:2002/08/20 08:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!