如果我提问时不清楚,请原谅。我会尽力在提问时说得非常清楚。
在学习嵌入式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
./script
script
会将位于当前目录中的文件.
作为新进程运行。
. script
使用参数调用 shell 函数.
(它是 的别名) 。这与在当前 shell 中输入所有包含的行几乎相同。source
script
您无法使用第一个选项设置变量,因为变量仅为新进程设置。变量只能从父级导出到子级,而不是相反。 (即被调用的进程不能修改当前进程中的变量。)