Answers:
您应该使用以下命令获取脚本
. ./script
要么
source ./script
.或source。为什么会这样呢?
exit语句,所以不适合用作源。
source ./script,虽然工作完全正常。如何使用sudo做到这一点?sudo source ./script.shsudo: 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中运行命令。