Answers:
您应该使用以下命令获取脚本
. ./script
要么
source ./script
.
或source
。为什么会这样呢?
exit
语句,所以不适合用作源。
source ./script
,虽然工作完全正常。如何使用sudo做到这一点?sudo source ./script.sh
sudo: source: command not found
sudo
,取决于/etc/sudoers
是否可以保留环境,取决于编译偏好和配置设置sudo
。我建议您尝试获取脚本的源代码,然后sudo
使用-E
选项运行以保留环境。如果不起作用,我想您几乎无能为力。
运行脚本时,它将获得自己的外壳和环境,脚本完成后,外壳和环境将再次消失。要保留环境变量,请将脚本源到当前的shell中:
$ source ./a.sh
或等效地(但更便于携带)使用POSIX dot命令:
$ . ./a.sh
然后,这些定义将被放入当前Shell的环境中,并被您从其中启动的任何程序继承。
为了更接近于运行脚本,. a.sh
将通过搜索PATH
环境变量中的目录来找到a.sh。
它们的行为方式以及是否.
和source
(或完全相同)存在一些细微差别。. ./a.sh
在每个与POSIX兼容的外壳中,其行为肯定相同,但是source
和.
,和. a.sh
和. ./a.sh
可以有所不同。对于Bash source
,.
在所有情况下都相同;因为zsh source
总是首先检查当前目录 ; ksh本质上是相似的。
如果将脚本名称指定为路径(包含/
),则在所有情况下都将直接使用该路径。最可移植的可靠方法是. ./script
或. /path/to/script
。
.
或时source
,您没有生成新的子进程,而是在当前shell中运行命令。