收集并行命令变量中的命令输出

时间:2015-06-26 01:47:43

标签: bash

我想并行运行几个命令,但然后显示分组的输出(不是缠绕在一起)。

所以我有error.sh:

echo "e1"
sleep 2
echo "e2"
exit 1

success.sh:

echo "s1";
sleep 1;
echo "s2";
exit 0;

和我运行的test.sh:

./success.sh & success_pid=$!
out=$(./error.sh) & error_pid=$!

wait $success_pid
echo $?
wait $error_pid
echo $?
echo $out

echo "fine :)"

但是,分配第二个脚本的输出并不像预期的那样工作(它是空的)。我知道我可以使用文件,但有趣的问题是:它为什么不工作以及如何使它工作?

1 个答案:

答案 0 :(得分:2)

赋值发生在生成执行background命令的子shell中,因此它不会影响原始shell中的变量。将输出重定向到文件。

./success.sh & success_pid=$!
./error.sh > /tmp/error.out & error_pid=$!

wait $success_pid
echo  $?
wait $error_pid
echo $?
cat /tmp/error.out

echo "fine :)"