我试图将我的整个环境设置放入一个 bash 文件中。我只解决一个问题。当我尝试从文件内部导出新路径时,它没有在执行 bash 文件的环境中设置路径。我想做
>>sudo -H sh test.sh
test.sh 在哪里
bunch of installs
export PATH=/home/ubuntu/anaconda3/bin:$PATH
a second bunch of installs
我认为这就是 eval 的目的所以我尝试了
eval `export PATH=/home/ubuntu/anaconda3/bin:$PATH`
乃至
eval `echo "export PATH=/home/ubuntu/anaconda3/bin:$PATH"`
但我无法访问终端中的命令。如果我手动执行它就可以了。
- - - - - - - -更新 - - - - - -
标准 bash 执行在子 shell 中完成,因此环境变量在执行后会丢失。如果你想在同一个 shell 中执行,那么你
source test.sh
但是,我需要能够在执行中拥有完全权限,所以我需要使用须藤。正如所解释的这里你不能打电话须藤源但他们确实提供了一个 hack 让它工作
source <(sudo cat /etc/environment)
答案1
如果您使用的是 bash,那么简短的答案是将导出的变量放入现有的个人启动(或初始化)文件之一。当您关闭终端时,在终端中导出的变量会丢失。当脚本退出时,脚本中导出的变量会丢失。
还有其他启动文件可能存在也可能不存在,但这些是最常见的:
~/.bashrc
- 由 bash 针对非登录 shell 执行
~/.bash_profile
- 由 bash 执行用于交互式登录 shell
~/.profile
是没读过如果这个文件存在~/.bashrc
也在某些系统上读取- 需要(注销并)登录才能重新读取文件
~/.profile
- 由登录 shell 的命令解释器执行
- 是没读过当
~/.bash_profile
存在时 ~/.bashrc
也在某些系统上读取- 需要(注销并)登录才能重新读取文件
或者,您使用所有个人自定义项创建一个新的启动文件,并使用命令行/脚本或上述启动文件之一读取它(获取它source /path/to/myenvironment
). /path/to/myenvironment
。
一些示例启动文件位于bash-doc
Ubuntu/Debian 的软件包中(使用sudo apt-get install bash-doc
)并安装到/usr/share/doc/bash/examples/startup-files/