假设我有一个shell脚本文件foo.sh
。
我可以chmod + x foo.sh
将其更改为可执行文件。
在《 Kernighan-Pike:Unix编程环境(UP)》中,他们显示了在键入之后foo
应该执行脚本。相反,在我的Ubuntu系统中,我需要输入sh foo
或./foo
。我猜这是由于外壳的某些功能(在编写UP时)所没有的。如果有人能启发我,我将不胜感激,为什么存在这种差异,为什么如此重要?
可执行文件的名称很重要。如果您的文件名为foo.sh
,那么foo
除非有其他名为的可执行文件,否则执行将无法进行foo
。与Windows不同,Unix不执行隐式文件扩展名。
如果以下方法有效:
./foo.sh
但这不是:
foo.sh
这意味着该文件位于您的当前目录中,而您的当前目录不在您的PATH中。为了保护您,如果您未明确提供命令的路径,则Shell只会在PATH中的文件中寻找该命令。
空间很重要。以下可能会起作用:
./foo.sh
但是,这(取自该问题的第一个版本)肯定行不通:
./ foo.sh
在./
和之间使用空格foo.sh
,外壳程序会认为您要使用foo.sh
作为参数执行当前目录。这将生成一条错误消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句