使用shell脚本设置控制台环境
使用shell脚本设置控制台环境
我有一个名为setmyenv.sh
的shell脚本,内容如下:
#!/bin/sh export PATH=./abc/tools:$PATH env | grep PATH
当我运行sh setmyenv.sh
时,我可以看到PATH环境变量被相应地设置为:
PATH=./abc/tools:<现有的PATH设置>
然而,当我的命令结束后,如果我在控制台上手动输入env | grep PATH
,我得到的结果是:
PATH=<现有的PATH设置>
我丢失了使用setmyenv.sh
设置的环境变量。
看起来环境变量只在脚本运行期间设置。
如何在脚本结束后仍然保持环境变量设置?也就是说,脚本的目的是设置环境变量。
附注:我不想在.bash_profile
或etc\profile
中设置,因为我只想在需要时通过调用setmyenv.sh
来设置它,而不是每次打开控制台时都设置。也就是说,不是按照Using .sh script to set an environment variable或How to set global environment variables using shell script .sh的答案。
当你运行sh setmyenv.sh
时,它在一个单独的sh
进程中运行,当进程结束时,对PATH的更改会丢失。
你需要使用source命令来运行脚本:
source setmyenv.sh
或者
. setmyenv.sh
这样它将在当前的shell中运行,所有变量的赋值将被保留。请记住在setmyenv.sh
脚本中不要使用exit
命令,如果使用了,sourcing脚本将终止你的shell。
参见:
当你运行sh setmyenv.sh
时,它在一个单独的shell进程中运行 - 这不同于子shell。子shell具有特定的属性,例如在子shell中可以读取局部变量 - 它们不需要被导出。通常使用括号创建子shell,例如( commands )
。