假设我有一个 shell 脚本文件foo.sh
。
我可以将chmod + x foo.sh
其更改为可执行文件。
在 Kernighan-Pike:Unix 编程环境 (UP) 中,他们表明在输入之后foo
应该执行脚本。相反,在我的 Ubuntu 系统中,我需要输入sh foo
或./foo
。我猜测这是由于 shell 的某些功能(在编写 UP 时)不存在的。如果有人能启发我为什么存在这种差异以及为什么它很重要,我将不胜感激。
答案1
可执行文件的名称很重要。如果您的文件已命名
foo.sh
,则foo
除非有其他名为 的可执行文件,否则执行将不起作用foo
。与 Windows 不同,Unix 不这样做隐含的文件扩展名。如果以下方法有效:
./foo.sh
但这并没有:
foo.sh
这意味着该文件位于您的当前目录中,并且当前目录不在您的 PATH 中。为了保护您的安全,如果您没有显式提供命令的路径,shell 将仅在您的 PATH 中的文件中查找该命令。
空格很重要。以下方法可能有效:
./foo.sh
但是,这(取自这个问题的第一个版本)肯定行不通:
./ foo.sh
./
和之间有空格foo.sh
,shell 会认为您要以当前目录作为foo.sh
参数执行。这将生成一条错误消息。