在我当前的项目中,我运行了一个循环,在执行期间定义了一个稍后需要的变量。一切都很好,直到我想用 tee 添加日志记录,这样我以后也可以在文件中检查日志。因为我想同时记录标准输出和标准错误,所以我申请|&
了(的快捷方式2>&1 |
)。但奇怪的是,变量的值会丢失。
for i in 1 2 3 ; do
# ... do something meaningful ...
myVar=test1
done |& tee test1
echo "myVar=$myVar"
输出:
myVar=
同时我找到了一种更好的方法:当我切换到文件重定向和进程替换的组合时,变量定义有效。
for i in 1 2 3 ; do
# ... do something meaningful ...
myVar=test2
done > >(tee test2 ) \
2> >(tee test2 >&2)
echo "myVar=$myVar"
输出:
myVar=foo
但我想了解,为什么:-)
- 为什么在第一个示例中值会丢失?
- 为什么它不会在第二次丢失?
你能告诉?