我正在尝试同时运行几个命令。我通过将每个命令附加到一个看起来像
的命令,在脚本中准备它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:
那么如何终止分叉进程,或者在分叉进程完成之前让脚本阻塞?
答案 0 :(得分:1)
假设您的示例已经简化(因为'echo'应该立即完成并返回到提示符),您只需要对第二个命令进行后台处理。 IOW,试试:
command="$command1 & $command2 &"
请注意,我已删除了您的“和”变量,因为它只是模糊处理。单个&
绝不是and
操作。
答案 1 :(得分:0)
你得到这样的输出:
~/dev/other $ echo foo &
[1] 522
~/dev/other $ foo
▯ # blink, blink, blink…
在这种情况下, 被返回到提示符,但提示符出现在echo
完成之前,因此要echo
的字符串出现在提示,然后换行。您可以在提示后在该新行上编写下一个命令,或者只需点击enter
即可获得新提示。
如果在脚本中发生这种情况,您可以将内置wait
添加到脚本的末尾,以确保脚本在所有后台子进程完成之前不会返回提示。
答案 2 :(得分:0)
我认为你的命令应该是这样的:
command= $command1$and$command2$and