未设置变量的bash脚本

未设置变量的bash脚本,bash,shell,Bash,Shell,我有一个看似简单的bash脚本来设置我的环境: 前两行是: #!/bin/bash export CVE_ENV_DIR=$PWD 放松点,嘿?好吧,看看当我运行它时会发生什么,我得到以下输出: $ echo $PWD /work/env $ ./env.sh $ echo $CVE_ENV_DIR $ 为什么CVE_ENV_DIR没有设置为/work/ENV?这里发生了什么?当我在shell上手动键入export CVE_ENV_DIR=$PWD时,它会按预期工作…子shell不能影

我有一个看似简单的bash脚本来设置我的环境: 前两行是:

#!/bin/bash
export CVE_ENV_DIR=$PWD
放松点,嘿?好吧,看看当我运行它时会发生什么,我得到以下输出:

$ echo $PWD
/work/env
$ ./env.sh 
$ echo $CVE_ENV_DIR

$ 

为什么CVE_ENV_DIR没有设置为
/work/ENV
?这里发生了什么?当我在shell上手动键入export CVE_ENV_DIR=$PWD时,它会按预期工作…

子shell不能影响其父shell的环境。如果希望脚本影响父级环境,则需要:

source ./env.sh
发生了什么事?当您通过
bash env.sh
env.sh
运行bash脚本时,您正在生成一个具有自己环境的程序,一个与其父环境分离的环境。但是,当您在命令行或使用
source
运行脚本中包含的命令时,没有生成的环境


编辑以解决@syme的评论。使用
source
读取的Bash脚本通常是纯配置的,只包含赋值和计算。也可以通过类似的方式让他们变得更有帮助和自我记录:

使用于配置的bash脚本看起来像配置脚本,可以帮助未来的维护人员。您还可以帮助我将脚本代码模块化为不同的部分,每个部分都有其独特的功能


作为旁注,请不要这样做。

子外壳不会影响其父外壳的环境。如果希望脚本影响父级环境,则需要:

source ./env.sh
发生了什么事?当您通过
bash env.sh
env.sh
运行bash脚本时,您正在生成一个具有自己环境的程序,一个与其父环境分离的环境。但是,当您在命令行或使用
source
运行脚本中包含的命令时,没有生成的环境


编辑以解决@syme的评论。使用
source
读取的Bash脚本通常是纯配置的,只包含赋值和计算。也可以通过类似的方式让他们变得更有帮助和自我记录:

使用于配置的bash脚本看起来像配置脚本,可以帮助未来的维护人员。您还可以帮助我将脚本代码模块化为不同的部分,每个部分都有其独特的功能


作为补充说明,请不要这样做。

我会添加两个小东西。因为脚本不再被执行:执行权限不再是必需的(只有阅读权限),shebang也不再需要了。因为脚本不再被执行:执行权限不再是必需的(只有那些读取权限),shebang也不再需要。