我有一個腳本假設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
我有一個腳本假設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
事情浮現在腦海:
如果你使用bash,您可以使用點運行腳本:
.script1.sh
它會在同一個環境中運行的腳本,所以你可以修改「調用」的環境變量腳本。
如果它是一個單一的輸出數據時,可以只打印到內腳本和截距在外部腳本的標準輸出:
inner_result =`script1.sh`
如果它是一個數值,可以返回它作爲腳本的退出代碼(但是我不推薦這種方法,因爲它是在腳本開發一種不好的做法)
編輯:
這可以與在bash 4.x版協進程完成後,如果你的script1
和script2
寫的變量到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個或更多。相反,它應該在實踐中是5
或6
以上代碼。
它是否嚴格定義它應該運行哪個shell解釋器/操作系統或解決方案應該是可移植的? – mpasko256
unix bash shell @ mpasko256 – abhisek
不是它的某種副本 https://stackoverflow.com/questions/42067435/how-to-return-a-variable-from-one-shell-script-to-another -script?rq = 1 問題? – mpasko256