繁体   English   中英

已知壳和环境变量

[英]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 . ./set.env是...奇怪。 command阻止执行Shell函数,但会阻止执行名为的函数的任何环境. 被定义为一个越野车环境。 考虑一下. start.sh 单独使用. start.sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM