传递变量从一个脚本到另一个shell脚本

传递变量从一个脚本到另一个shell脚本

问题描述:

我有一个脚本假设script.sh 它有两个脚本里面传递变量从一个脚本到另一个shell脚本

sh script1.sh & 
sh script2.sh & 
wait; 
echo $var1 
echo $var2 

我想这两个变量(VAR1,VAR2)parallaly运行印刷在运行script.sh

cat script1.sh 

var1=1; 
export $var1 

cat script2.sh 

var1=1; 
export $var1 
+0

它是否严格定义它应该运行哪个shell解释器/操作系统或解决方案应该是可移植的? – mpasko256

+0

unix bash shell @ mpasko256 – abhisek

+0

不是它的某种副本 https://*.com/questions/42067435/how-to-return-a-variable-from-one-shell-script-to-another -script?rq = 1 问题? – mpasko256

事情浮现在脑海:

  1. 如果你使用bash,您可以使用点运行脚本:

    .script1.sh

    它会在同一个环境中运行的脚本,所以你可以修改“调用”的环境变量脚本。

  2. 如果它是一个单一的输出数据时,可以只打印到内脚本和截距在外部脚本的标准输出:

    inner_result =`script1.sh`

  3. 如果它是一个数值,可以返回它作为脚本的退出代码(但是我不推荐这种方法,因为它是在脚本开发一种不好的做法)

编辑:

  1. 使用临时文件来存储结果,然后将其删除(但取决于操作系统,命名的队列可能是最好的专用溶液)
开始=“4”>
+0

script1.sh和script2.sh返回单个输出数据。但是两者必须一起触发,并且在等待呼叫后打印val1和val2 – abhisek

+0

我错过了需要脚本需要并行运行的要求,因此添加了第四个解决方案 – mpasko256

+0

如果您只需要bash 4.x支持,我实际上建议coprocesses。顺便说一句,因为1-2没有解决问题*根本就没有*和3需要通过个人PID到'等待'退出状态绑回他们,我会建议大量修改这个答案。 –

这可以与在bash 4.x版协进程完成后,如果你的script1script2写的变量到stdout:

#!/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个或更多。相反,它应该在实践中是56以上代码。