我构建了一个简单的例子来说明这个问题:管道后不能得到源脚本中的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