应该在任何shell中运行的env和start.env。 它实际上除了KORN之外,其中env变量设置不像我期望的那样。那么看看例子。
file set.env:
#!/bin/bash
export MY_VAR="home" || setenv MY_VAR "home"
file start.sh:
#!/bin/bash
command . ./set.env || source set.env
echo "$MY_VAR"
我可以看到变量的打印。 但如果尝试在ksh下的终端中回显它,则转为未定义。
ksh$ start.sh
home
ksh$ echo $MY_VAR
ksh$
我希望在我的会议中看到$ MY_VAR ...有什么想法吗? //在红帽下运行
答案 0 :(得分:4)
当您运行start.sh
时,您将其作为子命令执行,而不是采购它。因此,它对环境变量所做的更改将限定在该进程及其子进程中;一旦进程退出,它设置的环境变量就会消失。
要移植脚本,在当前shell中执行它,然后在该shell中设置环境变量,运行:
# this works on any POSIX shell, including ksh (and bastardizations such as mksh)
. start.sh
......或者,不太便携:
# this is a bashism
source start.sh
顺便说一句,作为一种做法,command . ./set.env
是......奇怪的。 command
阻止执行shell函数,但是定义了名为.
的函数的任何环境都可以说是一个错误的环境。单独考虑. start.sh
。