尝试从 bash 脚本内部导出路径

尝试从 bash 脚本内部导出路径

我试图将我的整个环境设置放入一个 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-docUbuntu/Debian 的软件包中(使用sudo apt-get install bash-doc)并安装到/usr/share/doc/bash/examples/startup-files/

相关内容