gpt4 book ai didi

linux - korn shell 和环境变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:20 24 4
gpt4 key购买 nike

应该在任何 shell 中运行的 env 和 start.env。它实际上确实如此,但 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$

我希望在我的 session 中看到 $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

顺便说一句,作为一种实践,命令。 ./set.env 很奇怪。 command 阻止 shell 函数的执行,但是任何定义了名为 . 的函数的环境都可以说是一个有问题的环境。考虑。 start.sh 单独。

关于linux - korn shell 和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39494592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com