0

複数のコマンドを同時に実行しようとしています。次のような単一のコマンドに各コマンドを追加して、スクリプトで準備します。

and=" & "
command=$command1$and$command2
eval $command

ただし、これを実行すると、各コマンドはフォークされて正しく完了しますが、コマンドラインでハングし、プロンプトに戻ることはありません。

例(スクリプトrun.sh)。2つのコマンドが次の場合:

command1="echo 'Hello'"
command2="echo 'World'"

その場合、出力は次のようになります。

person: ./run.sh
Hello
World
## It Hangs here

それ以外の

person: ./run.sh
Hello
World
person: 

では、フォークされたプロセスを終了するにはどうすればよいですか、またはフォークされたプロセスが完了するまでスクリプトをブロックするにはどうすればよいですか?

4

3 に答える 3

1

例が単純化されていると仮定すると (「echo」はすぐに完了してプロンプトに戻るため)、2 番目のコマンドをバックグラウンドにするだけで済みます。IOW、試してください:

command="$command1 & $command2 &"

「and」変数は単なる難読化であるため、削除したことに注意してください。シングル&は決してand操作ではありません。

于 2012-07-31T15:43:08.143 に答える
0

次のような出力が得られていますか?

~/dev/other $ echo foo &
[1] 522
~/dev/other $ foo
▯ # blink, blink, blink…

この場合、プロンプトに戻りますecho、完了する前にプロンプ​​トが表示されるためecho、プロンプトの後に改行が続く文字列が表示されます。プロンプトの後のその新しい行に次のコマンドを書くか、または単に押すenterと新しいプロンプトが表示されます。

これがスクリプトで発生している場合は、組み込みwaitをスクリプトの最後に追加して、バックグラウンドの子プロセスがすべて完了する前にスクリプトがプロンプトを返さないようにすることができます。

于 2012-07-31T15:45:29.107 に答える
0

あなたのコマンドは次のようになるべきだと思います:

command= $command1$and$command2$and
于 2012-07-31T15:50:11.583 に答える