我正在尝试同时运行多个命令。我在一个脚本中准备它,将每个命令附加到一个看起来像的命令中
and=" & "
command=$command1$and$command2
eval $command
然而,当我运行此命令时,每个命令都会被分叉并正确完成,但它会挂在命令行,并且永远不会返回到提示符。
示例(脚本run.sh)。如果这两个命令是:
command1="echo 'Hello'"
command2="echo 'World'"
则输出为:
person: ./run.sh
Hello
World
## It Hangs here
而不是
person: ./run.sh
Hello
World
person:
那么,我如何终止分叉的进程,或者让脚本块直到分叉的进程完成?
假设您的示例被简化了(因为'echo'应该立即完成并返回到提示符),您只需要后台执行第二个命令。IOW,尝试:
command="$command1 & $command2 &"
请注意,我已经删除了您的"and"变量,因为它只是混淆。单个&
决不是and
操作。
你得到的输出是这样的吗:
~/dev/other $ echo foo &
[1] 522
~/dev/other $ foo
▯ # blink, blink, blink…
在这种情况下,被返回到提示,但提示在echo
完成之前出现,因此要echo
ed的字符串出现在提示之后,后面跟着一行换行符。您可以在提示后的新行中编写下一个命令,或者只需点击enter
即可获得新提示。
如果在脚本中发生这种情况,可以将内置的wait
添加到脚本的末尾,以确保脚本在其所有后台子进程完成之前不会返回提示。
我认为您的命令应该是这样的:
command= $command1$and$command2$and