当你运行一个shell脚本,它在一个子壳的完成,因此它不能影响父shell的环境。您想通过以下方式来获取脚本源:
. ./setfoo.sh
这将在当前外壳程序的上下文中执行它,而不是作为子外壳程序执行。
从bash手册页:
。文件名[参数]
源文件名[参数]
在当前Shell环境中从文件名读取并执行命令,并返回从文件名执行的最后一条命令的退出状态。
如果filename不包含斜杠,则PATH中的文件名用于查找包含filename的目录。
在PATH中搜索的文件不必是可执行的。当bash不在POSIX模式下时,如果在PATH中找不到文件,则搜索当前目录。
如果shopt内置命令的sourcepath选项已关闭,则不会搜索PATH。
如果提供了任何参数,则在执行文件名时它们将成为位置参数。
否则,位置参数将保持不变。返回状态是脚本中退出的最后一条命令的状态(如果未执行任何命令,则返回0),如果找不到或无法读取文件名,则返回false。