使用正确的 shebang 行执行 shell 脚本时出现错误的解释器错误

使用正确的 shebang 行执行 shell 脚本时出现错误的解释器错误

从路径(脚本名,而不是“sh 脚本名”)执行脚本时,我收到以下错误:

-bash:./gitup:/bin/bash/:错误的解释器:不是目录

同一目录中的所有其他脚本均能顺利执行,手动执行脚本 (sh scriptname) 时不会遇到此问题,只有单独执行脚本时才会遇到此问题。因此,脚本本身似乎不是问题,因为它确实可以正常执行,直到我打开新的 shell 会话并仅遇到此脚本的此错误时才如此。

该脚本是可执行的,包含按照我描述的方式执行的所有必需行(它在今天早些时候之前运行正常)并且可以由我的用户执行,所以我不确定问题可能是什么。

shebang 行显示为 #!/bin/bash。我使用命令“export PATH=$PATH:repos/utilities”指向存储这些脚本的目录,除此以外,所有脚本都只需调用脚本名称(即 gitup)即可执行。

答案1

我能想到一些事情。

  1. 您说您的脚本位于 $PATH 中,但您使用其完整路径调用它(./gitup而不是仅使用gitup)。 可能是您编辑了脚本的一个版本(例如,位于 $PATH 中的版本~/bin/gitup),然后执行了另一个版本(./gitup)?

  2. 你的 $PATH 中可能会有多个版本吗?你可以使用以下命令进行检查

    which -a gitup
    
  3. 您可能在编辑脚本时无意中输入了一个奇怪的不可见字符。使用以下命令检查 shebang 行od

    head -1 ./gitup | od -c
    

    #!/bin/bash确保换行符 ( )后面没有任何内容\n。它应该如下所示:

    0000000   #   !   /   b   i   n   /   b   a   s   h  \n
    0000014
    

答案2

检查 shebang ( #!) 行,确保它显示

#!/bin/bash

并不是

#!/bin/bash/

如果它看起来像第二个示例,请将其更改为第一个。

编辑(回应评论)

如果这个问题只限于一个脚本,请复制此脚本,然后开始从中删除代码,并制作一个仍显示此问题的最小脚本。然后发布该最小脚本。

相关内容