繁体   English   中英

如何在 Bash 中导出变量

[英]How to export a variable in Bash

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

export MY_VAR=/opt/my_var

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

不是真的 - 一旦你在子流程中运行,你就不会影响你的父母。

有两种可能性:

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

source {script}

2)让脚本输出导出命令,并评估:

eval `bash {script}`
OR:
    eval "$(bash script.sh)"

编辑:修正了第二个选项是eval而不是source。 哎呀。

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

在foo.sh中,您有:

#!/bin/bash
echo MYVAR=abc123

当您想获得变量的值时,您必须执行以下操作:

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

根据你想要做什么,以及你想怎么做,Douglas Leeder关于使用source的建议可以使用,但它将提供整个文件,函数和所有。 使用eval,只会评估回显的内容。

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

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

......每个新的bash流程......

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

env -i DISPLAY=:0 prog_that_need_xwindows arg1 arg2

您可能希望使用源代码而不是直接运行可执行文件:

# Executable : exec.sh
export var="test"
invar="inside variable"
source exec.sh
echo $var    # test
echo $invar  # inside variable

这将运行文件,但在与父 shell 相同的 shell 中。
在极少数情况下可能存在的缺点:无论是否显式导出,所有变量都将被导出。 如果需要取消设置某些变量,请显式取消设置。 同样,处理导入的变量。

# Executable : exec.sh
export var="test"
invar="inside variable"
# --- #
unset invar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM