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

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

如果我提问时不清楚,请原谅。我会尽力在提问时说得非常清楚。

在学习嵌入式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

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

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

.我可以知道和之间有什么区别./以及何时使用哪一个吗?

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

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

答案1

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

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

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

相关内容