我構建了一個簡單的例子來說明這個問題:管道後不能得到源腳本中的bash變量?
caller.sh
:
#!/usr/bin/env bash
state="loaded"
source "sh/callee.sh" 2>&1
echo "$state"
callee.sh
:
#!/usr/bin/env bash
state="integrated"
當我運行caller.sh
,它給了我想要的結果:
integrated
但是,如果我的源命令後添加一個管:
caller.sh
:
#!/usr/bin/env bash
state="loaded"
source "sh/callee.sh" 2>&1 | cat
echo "$state"
結果變成:
loaded
問:我如何保存/恢復的更改值$state
在caller.sh
?
管道分叉一個子外殼,一旦子外殼終止,該值就會丟失 – Inian
您首先使用'cat'的意圖是什麼? – Inian