This question already has answers here:
Bash: Capture output of command run in background

(3个答案)


6年前关闭。




我正在尝试编写一个bash脚本,该脚本收集由多个命令返回的数值结果,然后对结果进行一些简单的算术运算。如果命令(独立的)可以并行运行,那就太好了。以下内容在没有“&”的情况下可以正常工作,并且需要10秒钟。使用“&”,它需要5秒钟的时间,但随后会在下面显示错误消息。感谢任何建议。
#!/bin/bash
set -eu
echo "Running .."
aa=$(sleep 5; ls |wc -l) & ###try with and without <&>
bb=$(sleep 5; ls |wc -l) & ###try with and without <&>
wait
cc=$(($aa + $bb))
echo $cc

run.sh: line 7: aa: unbound variable

最佳答案

&不仅会影响括号的内容,还会影响整个命令。也就是说,它影响分配本身。

但是&实际做什么?它在单独的进程中运行命令。一种变量分配不会反射(reflect)到父 shell 的情况。这意味着即使在运行了整整5秒钟之后,该命令除了在parens中运行命令外,绝对不会完成任何操作。

10-05 20:48
查看更多