[英]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.