我目前正在寻找一种通过简单的shell脚本在Linux中设置环境变量的方法。在我正在使用'export'命令的脚本中,但是这只在脚本中具有需要系统范围的范围。
无论如何我可以通过shell脚本执行此操作,还是需要使用其他方法?
答案 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将使用。除非使用~/.profile
或bash
调用文件--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)
环境变量的一个基本方面是,您不能影响任何进程的环境,而是影响您生成的自己和子进程。您无法创建一个脚本来设置“系统范围”的环境变量,这些变量在某种程度上可以被其他进程使用。