如何在 Linux 中从文件运行 Bash 'export' 命令?



我很惊讶能够在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中运行命令,就会显示变量。

这里有两个问题。

  1. 脚本无法修改其父进程的环境。

    ./test将运行一个子shell,在该子shell中,export是变量。然后,子shell退出,导出变量的环境与子shell使用的所有其他资源一起不复存在。

    这是一个常见的常见问题解答;shell脚本中的全局环境变量

  2. 表面上的解决方案是source ./test,但如果没有./,你最终会看到Bash检查PATH并找到/bin/test。将文件重命名为与现有命令不重叠的文件,使用source ./testsource /path/to/current/directory/test而不是没有路径的source test;或者(绝对是最不推荐的解决方案,但为了完整起见,我还是会提到它(将.添加到PATH的开头,这样在PATH解析过程中,./test/bin/test更可取。

我必须执行以下操作才能修复;

source ./test

或者,您可以将文件转换为".txt"扩展名,然后使用

source test.txt 

导出变量。

最新更新