在shell脚本中设置环境变量不会使它对shell可见

GDI*_*der 29 unix export environment-variables

我想使用一个shell脚本,我可以调用它来设置一些环境变量.但是,在执行脚本之后,我在bash中看不到使用"printenv"的环境变量.

这是我的脚本:

#!/bin/bash

echo "Hello!"
export MYVAR=boubou
echo "After setting MYVAR!"
Run Code Online (Sandbox Code Playgroud)

当我做"./test.sh"时,我看到:

Hello!
After setting MYVAR!
Run Code Online (Sandbox Code Playgroud)

当我做"printenv MYVAR"时,我什么也看不见.

你能告诉我我做错了什么吗?

NPE*_*NPE 51

这就是环境变量的工作原理.每个流程都有一份环境副本.进程对其副本所做的任何更改都会传播到进程的子进程.但是,它们不会传播到进程的父级.

解决此问题的一种方法是使用以下source命令:

source ./test.sh
Run Code Online (Sandbox Code Playgroud)

要么

. ./test.sh
Run Code Online (Sandbox Code Playgroud)

(这两种形式是同义词).

执行此操作时,将在脚本中bash执行每个命令,而不是在子shell中运行脚本,就像在提示符下键入它一样.

  • @GDICommander:不.当你运行`bash test.sh`时,这会创建一个新的`bash`进程,执行脚本**并退出**. (2认同)