设置 Linux 环境变量

设置 Linux 环境变量

我正在运行 Red Hat Linux Enterprise 5;我总是使用 export 命令来设置环境变量。

还有其他方法可以设置环境变量吗?它们的优点/缺点是什么?

答案1

这是 Bash 手册页的摘录:

export [-fn] [name[=word]] ...
export -p
提供的名称被标记为自动导出到后续执行的命令的环境。如果给出了 -f 选项,则名称引用函数...

如果只需要当前环境中的变量,则无需使用export。

var=value

编辑:

不导出:仅限当前环境。导出:当前环境和子环境。

这里演示了导出对子环境中变量可用性的影响,以及子环境中的更改不会影响父级:

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

在第一个回显 ( echo "parent...") 之后,您会看到“123”和“456”,因为var1var2在当前环境中都处于活动状态。您看不到的值,var3因为它尚未设置。

在以“ ”开头的行之后,var3=...您看不到值,var1因为它没有被导出。您看到价值,var2因为它曾是已导出。您会看到一个值,var3因为它是为子环境设置的仅有的

bash -c相当于使用选项参数的内容运行脚本-c。脚本或其他可执行文件,或在这种情况下,参数bash -c成为当前环境的子级,因此,当然是子级的父级。)

在“脚本”中,变量的值已更改。它现在输出这些新值。

一旦“脚本”完成,执行将返回到父环境(在本例中为命令行)。在最后一次回显之后,您将看到原始值,因为在子环境中所做的更改不会影响父级。

答案2

你说

我总是使用导出命令来设置环境变量

顺便说一下,听起来你实际上是在问如何使环境变量持久存在。要做到这一点,你需要将语句放在export VAR="foo"$HOME/.bash_profile 文件中(如果你使用的是 bash)。如果你希望该环境变量对除 root 之外的所有用户都持久存在,则将其添加到 /etc/profile。如果你还希望为 root 用户添加它,则将其设置在 /root/.bash_profile 中。

这将适用于所有以 bash 为首选 shell 的登录 shell。对于非登录 shell,您需要使用 .bashrc。对于其他 shell,我没有提供任何见解 :D

答案3

导出是最直接的方法,那么为什么不就这样呢?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells

答案4

您还可以做这样的事情:

VAR=val application

例如:

LANG=C ls --help

以英文输出。

LANG=pl_PL ls --help

以波兰语输出(如果可用)。

过去,在 sh 中,您无法执行 export VAL=val。您必须

VAL=val; export VAL

相关内容