在Linux上动态设置环境变量

时间:2009-11-12 10:26:20

标签: linux shell environment-variables

我目前正在寻找一种通过简单的shell脚本在Linux中设置环境变量的方法。在我正在使用'export'命令的脚本中,但是这只在脚本中具有需要系统范围的范围。

无论如何我可以通过shell脚本执行此操作,还是需要使用其他方法?

5 个答案:

答案 0 :(得分:3)

运行shell脚本时,它会在子shell中执行。您需要的是在当前shell的上下文中执行它,方法是使用:

source myshell.sh

或:

. myshell.sh

后者是我的首选方法,因为我天生懒惰。

如果您正在讨论系统范围,因为您想要影响每个人,您需要将命令放在他们在登录时(或创建shell时)来源的地方,{{1 }} 例如。您放置命令的位置取决于所使用的shell。

通过检查shell的/etc/profile页面,您可以找到执行的脚本:

man

man bash shell作为登录shell(包括作为非登录shell但使用bash参数)调用时,将使用--login和{{1}中的第一个}},/etc/profile~/.bash_profile

非登录~/.bash_login shell将使用。除非使用~/.profilebash调用文件--norc--rcfile <filename>

我很确定甚至更多错综复杂,这取决于shell的运行方式,但这就是我的记忆延伸。 /etc/bash.bashrc页面应详细说明。

答案 1 :(得分:0)

在shell提示符下:

$ source script.sh

并在script.sh中设置env变种

答案 2 :(得分:0)

你可以让你的脚本检查是否存在类似/ var / myprog / env-vars-to-load和'source'的内容,然后取消链接(如果它存在),可能使用陷阱和信号。很难说,我不熟悉你的程序。

没有办法将环境变量“注入”另一个进程的地址空间,所以你必须找到一些IPC的方法,它可以指示进程设置的内容。

答案 3 :(得分:0)

test.sh

#!/bin/bash
echo "export MY_VAR=STACK_OVERFLOW" >> $HOME/.bashrc
. $HOME/.bashrc
sh task.sh

task.sh

#!/bin/sh

echo $MY_VAR

添加可执行权限:

chmod +x test.sh task.sh

lauch test.sh

./test.sh

结果:

STACK_OVERFLOW

答案 4 :(得分:0)

环境变量的一个基本方面是,您不能影响任何进程的环境,而是影响您生成的自己和子进程。您无法创建一个脚本来设置“系统范围”的环境变量,这些变量在某种程度上可以被其他进程使用。

相关问题