我需要从Bash脚本设置一个系统环境变量,使其在当前范围之外也可以使用。通常你可以像这样导出环境变量:
export MY_VAR=/opt/my_var
但是我需要这个环境变量在系统级别上可用。这可能吗?
我需要从Bash脚本设置一个系统环境变量,使其在当前范围之外也可以使用。通常你可以像这样导出环境变量:
export MY_VAR=/opt/my_var
但是我需要这个环境变量在系统级别上可用。这可能吗?
#!/bin/bash
echo MYVAR=abc123
当你想获取变量的值时,你需要执行以下操作:
$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH
$ echo $MYVAR #==> abc123
根据您想要做什么以及如何做到,可以使用Douglas Leeder的建议来使用source,但它将源化整个文件,包括函数等。使用eval,只有被回显的内容才会被评估。
您可能希望使用源代码而不是直接运行可执行文件:
# 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
在文件/etc/profile中设置变量(如果需要,创建文件)。这将使该变量对每个Bash进程都可用。
/etc/profile.d/
目录下。 - dimichroot
帐户下工作并且想要打开一个普通用户运行X的可执行文件时,我需要设置DISPLAY
环境变量。...env -i DISPLAY=:0 prog_that_need_xwindows arg1 arg2