在 Linux 中,如何使用初始化脚本更改 bash 环境变量?

在 Linux 中,如何使用初始化脚本更改 bash 环境变量?

我们知道,我们可以更改 bash 的环境变量,例如PATH,使用初始化脚本,例如.bashrc。只需写下来PATH=<VALUE>,你就会得到你想要的。

但是,考虑一下这个问题:

我们有一个名为的 bash 脚本rc

#!/bin/bash  

mySite="superUser"
export mySite
echo "the value of mySite is: $mySite"

然后我们声明变量mySite,执行rc脚本,然后检查变量的值:

$ declare -x mySite="super"
$ ./rc 
the value of mySite is: superUser
$ echo $mySite
super

该值仍然是super。我们是否可以得出结论,子 shell 不能使用类似指令直接更改父 shell 的变量VARIALBENAME=VLAUE

我们的rc脚本就像.bashrc,我们如何通过将 放入PATH=<VLAUE>其中来更改 bash 的环境变量的值,因为当.bashrc的执行结束时,调用 shell 的变量仍然没有改变?

答案1

环境变量遗传...并且父进程不会从其子进程那里继承任何东西(它以相反的方向工作)。

在第一种情况下,读取 rc 文件的 bash 进程要么与您使用变量的进程相同,要么是其祖先。

在第二种情况下,读取文件的进程是 shell 的子进程。有 3 种方法可以解决这个问题:

  1. 让你的脚本启动新的shell,它继承了变量。退出时,原来的 shell 将恢复(使用原来的环境)
  2. 来源rc 脚本而不是执行它:

    . ./rc
    

    或者

    source ./rc
    

    指示当前 shell 读取脚本本身(而不是在子进程中执行)然后恢复

  3. 明确评估输出(ssh-agent例如通常这样做)

    eval `./rc`
    

    其中 rc 已更改为

    #!/bin/bash
    echo "export mySite=\"superUser\""
    

相关内容