korn shell和环境变量

时间:2016-09-14 15:40:34

标签: linux bash shell environment-variables ksh

应该在任何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 ...有什么想法吗? //在红帽下运行

1 个答案:

答案 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

相关问题