This question already has answers here:
Bash: Capture output of command run in background
(3个答案)
6年前关闭。
我正在尝试编写一个bash脚本,该脚本收集由多个命令返回的数值结果,然后对结果进行一些简单的算术运算。如果命令(独立的)可以并行运行,那就太好了。以下内容在没有“&”的情况下可以正常工作,并且需要10秒钟。使用“&”,它需要5秒钟的时间,但随后会在下面显示错误消息。感谢任何建议。
(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中运行命令外,绝对不会完成任何操作。