UNIX中的Shell脚本错误,但在CentOS中有效-源:未找到

UNIX中的Shell脚本错误,但在CentOS中有效-源:未找到,shell,unix,Shell,Unix,myconf.sh setting1=val1 setting2=val2 export setting1 export setting2 然后我在runner.sh中调用这个conf文件,但得到错误“runner.sh:source:notfound”。最初我在内部调用它时使用了source myconf.sh,并在一些帖子中看到我应该使用“.”而不是“source” myrunner.sh #!/bin/sh . myconf.sh echo "$setting1" echo "$sett

myconf.sh

setting1=val1
setting2=val2
export setting1
export setting2
然后我在runner.sh中调用这个conf文件,但得到错误“runner.sh:source:notfound”。最初我在内部调用它时使用了source myconf.sh,并在一些帖子中看到我应该使用“.”而不是“source”

myrunner.sh

#!/bin/sh
. myconf.sh
echo "$setting1"
echo "$setting2"
我正在通过此命令调用myrunner.sh

sh myrunner.sh
如果我真的做错了什么,请告诉我。我可以在CentOS映像中正确地调用它,而不会出现错误,但是当我们在UNIX框中执行它时,我遇到了错误


谢谢

您的
$PATH
环境变量设置为什么

您可能只需要在路径中包含当前目录或在文件名前加前缀

示例:
source./myconf.sh


预计到达时间:如上所述;将当前目录
放入您的路径可能不是最理想的做法。我建议使用它只是为了解释为什么您的脚本可以在一个系统上工作,而不能在另一个系统上工作。

这在哪个平台上不工作?这是什么具体的UNIX?你是说它在
源代码:找不到
时失败了,即使在你将
源代码
替换为
之后也是如此吗?使用
并没有错。使用
源代码
很有用,因为人类读者通常会发现它比
更可读,但它们完全相同。但是,这是有问题的,因为并非所有shell都能识别它。
source
sh
有误。POSIX标准仅保证
。myconf.sh
,而不是
源myconf.sh
,如果您使用
sh
(而不是
bash
ksh
,等等)来运行您的脚本,唯一保证存在的功能就是POSIX sh标准中的功能。@user3694537我在这里有部分猜测,但您的意思可能是“不,它不再显示
来源:未找到
。当我将其替换为
时,消息更改为
:myconf.sh:notfound
"? 如果是这样,您确实需要更新您的帖子以反映这一点。将当前目录添加到
路径
不是一个好主意,因为有一天您可能会将此脚本放在一个包含未知内容的目录中,而在调用
myconf.sh
时可能会运行其他内容。类似于
source$(dirname$0)/myconf.sh的东西可能更可靠。但您的判断是正确的,即如果目标脚本不在
路径中,则必须指定其路径。@FlorianWeimer同意。
。“$(dirname“$0”)/myconf.sh”
比上面的更不容易出错。我从来没有在我的
路径中包含当前目录,但是
/
源代码
对我来说仍然很好。@jwodder,是的,这是一个特例
/
源代码
在当前目录中查找路径之外的路径(实际上是在路径之前)。但是,将
添加到
路径
意味着您在非
调用中容易受到此类漏洞的攻击。