我很惊讶能够在Linux中运行除可执行文件中的导出命令之外的其他命令。
[root@test test1]# cat test
export test="1"
[root@test test1]# ./test
[root@test test1]# env | grep test
[root@test test1]# env | grep TEST
[root@test test1]# export test=2
[root@test test1]# env | grep test
test=2
"test"文件有一个名为test的变量。但是,在运行该文件后,"test"变量不存在于我的环境变量中。如果我只是在Bash中运行命令,就会显示变量。
这里有两个问题。
-
脚本无法修改其父进程的环境。
./test
将运行一个子shell,在该子shell中,export
是变量。然后,子shell退出,导出变量的环境与子shell使用的所有其他资源一起不复存在。这是一个常见的常见问题解答;shell脚本中的全局环境变量
-
表面上的解决方案是
source ./test
,但如果没有./
,你最终会看到Bash检查PATH
并找到/bin/test
。将文件重命名为与现有命令不重叠的文件,使用source ./test
或source /path/to/current/directory/test
而不是没有路径的source test
;或者(绝对是最不推荐的解决方案,但为了完整起见,我还是会提到它(将.
添加到PATH
的开头,这样在PATH
解析过程中,./test
比/bin/test
更可取。
我必须执行以下操作才能修复;
source ./test
或者,您可以将文件转换为".txt"扩展名,然后使用
source test.txt
导出变量。