导出在Shell脚本中不起作用,但通过CLI可以

neu*_*ert 0 linux shell ubuntu command-line-interface

我在以下文件-test.sh-中:

#!/bin/sh
export ASDF=test
Run Code Online (Sandbox Code Playgroud)

我这样做chmod +x test.sh,那么./test.sh最后echo $ASDF和什么都没有。好像没有设置$ ASDF。但是,如果我通过CLI而不是Shell脚本来执行此操作,则可以正常工作,并且已定义$ ASDF。

Shell脚本为什么不起作用?

anu*_*ava 5

这是因为:

./test.sh
Run Code Online (Sandbox Code Playgroud)

将创建一个子外壳,并在子外壳中设置env变量。子外壳退出后,该变量在父外壳中将不可用。

使用以下形式来避免派生子外壳程序并test.sh在当前外壳程序本身中执行:

. ./test.sh
Run Code Online (Sandbox Code Playgroud)

要么:

source ./test.sh
Run Code Online (Sandbox Code Playgroud)

现在,该变量ASDF也将在当前shell中可用。