我想并行运行几个命令,但然后显示分组的输出(不是缠绕在一起)。
所以我有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 :)"
但是,分配第二个脚本的输出并不像预期的那样工作(它是空的)。我知道我可以使用文件,但有趣的问题是:它为什么不工作以及如何使它工作?
答案 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 :)"