【发布时间】:2017-02-17 03:59:40
【问题描述】:
我有一个简单的 shell 脚本:
#!/bin/bash
echo test
我可以成功执行脚本:
./test.sh
和
source ./test.sh
但是,以下会引发错误:
. ./test.sh
错误:
.: Command not found.
什么可能导致错误?这适用于 el capitan(这是升级版),但不适用于 sierra。在过去的几个主要版本中,终端或默认 shell 是否发生了变化?
我正在使用默认终端运行 macOS 10.12.3 - 这是全新安装而不是升级(升级挂在以前的 shell 设置上)。
【问题讨论】:
-
你能像
. test.sh,POSIX来源推荐的那样试试吗。 pubs.opengroup.org/onlinepubs/9699919799/utilities/… -
我仍然得到 .: command not found
-
@Inian: POSIX 说“如果文件不包含
,shell 将使用 PATH 指定的搜索路径来查找包含文件的目录。”,这意味着你 必须 使用路径前缀 ./来获取当前 目录中的文件。. test.sh不应该查看当前目录,(bash可以,但dash、ksh和zsh不应该,符合 POSIX)。 -
@mklement0:公平点,适当指出!
-
. file不执行file,它在调用它的同一 shell 进程中运行来自file的命令(假设它是支持.的 shell)(它应该主要用于在 shell 中操作变量)