【发布时间】:2016-09-19 07:28:34
【问题描述】:
在 Bash 中,某些全局变量会在命令 tee 运行后意外取消设置。
测试代码如下:
#!/bin/bash
function set_global_variable(){
GLOBAL_VARIABLE="global_variable"
echo "set GLOBAL_VARIABLE($GLOBAL_VARIABLE)"
}
function get_global_variable(){
echo "get GLOBAL_VARIABLE($GLOBAL_VARIABLE)"
}
function normal_test(){
unset GLOBAL_VARIABLE
set_global_variable
get_global_variable
}
function unnormal_test(){
unset GLOBAL_VARIABLE
set_global_variable |tee random_file
get_global_variable
}
echo "normal_test"
normal_test
echo "unnormal_test"
unnormal_test
结果:
normal_test
set GLOBAL_VARIABLE(global_variable)
get GLOBAL_VARIABLE(global_variable)
unnormal_test
set GLOBAL_VARIABLE(global_variable)
get GLOBAL_VARIABLE()
unnormal_test中GLOBAL_VARIABLE的值为null,为什么?
【问题讨论】:
-
在管道中,命令在子 shell 中执行,这意味着它们对环境所做的任何更改在父 shell 中都不可见。
标签: bash shell environment-variables tee