问题描述
您可以使用 .
命令从 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