korn shell 和环境变量
korn shell and environment variables
env 和 start.env 应该 运行 在任何 shell 中。
它实际上确实如此,但 KORN 除外,其中 env 变量设置的行为与我期望的不同。所以看例子。
文件set.env:
#!/bin/bash
export MY_VAR="home" || setenv MY_VAR "home"
文件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...有什么想法吗?
//运行 红帽下
当您 运行 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
。
env 和 start.env 应该 运行 在任何 shell 中。 它实际上确实如此,但 KORN 除外,其中 env 变量设置的行为与我期望的不同。所以看例子。
文件set.env:
#!/bin/bash
export MY_VAR="home" || setenv MY_VAR "home"
文件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...有什么想法吗? //运行 红帽下
当您 运行 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
。