关于执行shell脚本

关于执行shell脚本

假设我有一个 shell 脚本文件foo.sh

我可以将chmod + x foo.sh 其更改为可执行文件。

在 Kernighan-Pike:Unix 编程环境 (UP) 中,他们表明在输入之后foo应该执行脚本。相反,在我的 Ubuntu 系统中,我需要输入sh foo./foo。我猜测这是由于 shell 的某些功能(在编写 UP 时)不存在的。如果有人能启发我为什么存在这种差异以及为什么它很重要,我将不胜感激。

答案1

  1. 可执行文件的名称很重要。如果您的文件已命名foo.sh,则foo除非有其他名为 的可执行文件,否则执行将不起作用foo。与 Windows 不同,Unix 不这样做隐含的文件扩展名。

  2. 如果以下方法有效:

    ./foo.sh
    

    但这并没有:

    foo.sh
    

    这意味着该文件位于您的当前目录中,并且当前目录不在您的 PATH 中。为了保护您的安全,如果您没有显式提供命令的路径,shell 将仅在您的 PATH 中的文件中查找该命令。

  3. 空格很重要。以下方法可能有效:

    ./foo.sh
    

    但是,这(取自这个问题的第一个版本)肯定行不通:

    ./ foo.sh
    

    ./和之间有空格foo.sh,shell 会认为您要以当前目录作为foo.sh参数执行。这将生成一条错误消息。

相关内容