我有一个脚本假设是script.sh 它有两个脚本在
中运行parallalysh script1.sh &
sh script2.sh &
wait;
echo $var1
echo $var2
我想在运行script.sh
时打印这两个变量(var1,var2)cat script1.sh
var1=1;
export $var1
cat script2.sh
var1=1;
export $var1
答案 0 :(得分:1)
如果您的script1
和script2
将其变量写入stdout,则可以使用bash 4.x中的协处理来完成此操作:
#!/usr/bin/env bash
# ^^^- Must be bash, not /bin/sh; must NOT start this script with "sh name".
start_seconds=$SECONDS
run_script1() { sleep 5; echo "one"; } # replace these with your script1 or script2
run_script2() { sleep 5; echo "two"; }
coproc coproc_script1 { run_script1; }
coproc coproc_script2 { run_script2; }
read -u "${coproc_script1[0]}" var1
read -u "${coproc_script2[0]}" var2
echo "End time: $(( SECONDS - start_seconds )); var1=$var1; var2=$var2"
如果值未并行运行,则End time
将为10或更多。相反,它实际上应该是5
或6
上面的代码。
答案 1 :(得分:0)
想到的事情:
如果您使用bash,则可以使用dot:
运行脚本.script1.sh
它将在同一环境中运行脚本,因此您可以修改" invoker"的环境变量。脚本。
如果是单个输出数据,您只需打印到内部脚本的标准输出并在外部脚本中截取:
inner_result =`script1.sh`
如果它是一个数值,你可以将它作为脚本的退出代码返回(但我不推荐这种方法,因为它在脚本开发中是一种不好的做法)
编辑: