DBS*_*DBS 2 shell path executable shell-script
假设我有一个 shell 脚本文件foo.sh。
我可以这样做chmod + x foo.sh
并将其更改为可执行文件。
在 Kernighan-Pike: Unix Programming Environment (UP) 中,他们表明在输入之后foo应该执行脚本。相反,在我的 Ubuntu 系统中,我需要输入sh foo或./foo。我猜这是由于 shell 的某些功能早先不存在(在编写 UP 时)。如果有人能启发我为什么存在这种差异以及为什么它很重要,我将不胜感激?
可执行文件的名称很重要。如果您的文件名为foo.sh,则foo除非有其他名为foo. 与 Windows 不同,Unix 不进行隐式文件扩展。
如果以下有效:
./foo.sh
Run Code Online (Sandbox Code Playgroud)
但这不会:
foo.sh
Run Code Online (Sandbox Code Playgroud)
这意味着该文件在您的当前目录中,而您的当前目录不在您的 PATH 中。为了您的保护,如果您没有明确提供命令的路径,shell 将只在您的 PATH 中的文件中查找该命令。
空间很重要。以下可能有效:
./foo.sh
Run Code Online (Sandbox Code Playgroud)
但是,这(取自本问题的第一个版本)肯定行不通:
./ foo.sh
Run Code Online (Sandbox Code Playgroud)
中间有空隙./和foo.sh,外壳会认为你想执行当前目录foo.sh作为参数。这将生成错误消息。