dot 命令在不同 shell 中的行为是否一致?

问题描述

您可以使用 . 命令从 shell 脚本执行命令,就像它们在调用 shell 脚本本身中一样。

如果我在我的 shell 脚本中使用 dot 命令,它在不同的 shell 解释器中的行为是否相似?

请注意:我不是询问 . 命令和 source 命令之间的区别。如果这就是您想了解的内容,请参阅另一个问题:Using dot or "source" while calling another script - what is the difference?

解决方法

在某些简单的 shell 下,点运算符不符合预期

$ /bin/sh --help
BusyBox v1.32.1 () multi-call binary.

$ cat /tmp/dot-sh.sh
#!/bin/sh
. xxx || echo "dot worked as expected"

$ /tmp/dot-sh.sh
/tmp/dot-sh.sh: 2: .: xxx: not found

要测试上面的示例,您可以:

docker run --rm -it alpine sh

但在 /bin/bash 下,点运算符确实表现得如预期:

$ cat /tmp/dot-bash.sh
#!/bin/bash
. xxx || echo "dot worked as expected"

$ /tmp/dot-bash.sh
/tmp/dot-bash.sh: line 2: xxx: No such file or directory
dot worked as expected