未设置变量的bash脚本
我有一个看似简单的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不能影
#!/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也不再需要。