“.”的区别 和“./”同时使用导出设置环境变量?

use*_*064 3 bash shell-script environment-variables

如果我在提问时不清楚,请见谅。提问的时候我会尽量说的很清楚。

在学习嵌入式 Linux 的同时,我们正在为我们的项目设置环境。我们写了一个shell脚本来设置类似这样的环境:

export PROJECT=example-sys
export PRJROOT=/home/karim/${PROJECT}
export TARGET=powerpc-linux
export PREFIX=${PRJROOT}/tools
export TARGET_PREFIX=${PREFIX}/${TARGET}
export PATH=${PREFIX}/bin:${PATH}
cd $PRJROOT
Run Code Online (Sandbox Code Playgroud)

将脚本另存为prjenv.sh. 当我练习使用./xyz.shor运行脚本或任何可执行文件时./abc,我运行./prjenv.sh并且 shell 没有抱怨,但是当我export -p查看变量是否已导出时,我在列表中找不到它们。

后来我注意到,我应该使用. prjenv.sh,在我运行脚本后,它设置了环境变量。

我想知道是什么样的区别../以及何时使用哪一种呢?

如果您需要更多信息,请告诉我。

PS:这是我第一次使用 Linux,所以如果我使用的一些技术术语有误,我深表歉意。

mic*_*has 7

./scriptscript位于当前目录中的文件.作为新进程运行。

. script使用参数 调用 shell 函数.(它是 的别名sourcescript。这与在当前 shell 中输入所有包含的行几乎相同。

您不能使用第一个选项设置变量,因为变量仅为新进程设置。变量仅从父级导出到子级,而不是相反。(即被调用进程不能修改当前进程中的变量。)