10

我需要从当前范围之外可用的 Bash 脚本设置系统环境变量。所以你通常会像这样导出环境变量:

export MY_VAR=/opt/my_var

但是我需要环境变量在系统级别可用。这可能吗?

4

4 回答 4

13

不是真的——一旦你在子进程中运行,你就不能影响你的父进程。

有两种可能:

  1. 获取脚本而不是运行它(参见source .):

    source {script}
    
  2. 让脚本输出导出命令,并评估:

    eval `bash {script}`
    

    或者

    eval "$(bash script.sh)"
    
于 2008-11-20T22:37:57.207 回答
6

这是我知道做你想做的唯一方法:

在 foo.sh 中,你有:

#!/bin/bash
echo MYVAR=abc123

而当你想获取变量的值时,你必须执行以下操作:

$ eval "$(foo.sh)"  # assuming foo.sh is in your $PATH
$ echo $MYVAR #==> abc123

根据您想做什么以及如何做,可以使用Douglas Leeder关于使用source的建议,但它将获取整个文件、函数和所有内容。使用 eval,只会评估得到回显的内容。

于 2008-11-20T22:55:01.823 回答
1

在文件/etc/profile中设置变量(如果需要,创建文件)。这实际上将使该变量可用于每个 Bash 进程。

于 2008-11-21T00:29:47.217 回答
0

当我在该root帐户下工作并希望例如在运行 X 的普通用户下打开 X 可执行文件时。
我需要设置DISPLAY环境变量...

env -i DISPLAY=:0 prog_that_need_xwindows arg1 arg2
于 2021-06-17T17:24:54.350 回答