【问题标题】:Linux shell script not found, but it does exist未找到 Linux shell 脚本,但确实存在
【发布时间】:2021-07-21 15:55:46
【问题描述】:

我在 Openwrt 上创建了一个 shell 脚本“/etc/aaa”,其中包含以下代码:

    #!/bin/sh
    echo "Hello World!"

我也使用这个命令来确保正确的权限:

chmod 777 /etc/aaa

使用以下 2 个命令中的任何一个执行时

sh /etc/aaa

ash /etc/aaa

它运行良好并打印“Hello World”。当我尝试使用此命令执行它时会出现问题:

/etc/aaa

我在哪里得到这个错误:

-ash: /etc/aaa: not found

谁能解释一下为什么会这样?我在这里错过了什么?

【问题讨论】:

  • 缺少脚本的可执行权限。
  • 不,我已经使用过“chmod 777 /etc/aaa”,我认为它与权限无关。对不起,我忘了提这个
  • DOS 换行符?可能只在第一行(shebang)?
  • 另一件可以搞砸的事情是 UTF-8“字节顺序标记”(这没有意义,但我离题了)file /etc/aaa 会考虑你的脚本,如果你有file
  • Re: "DOS 换行符" -- 如果您的文件是在没有能够理解 UNIX 文本文件的编辑器的情况下在 Windows 中创建的,那么它的行将以两个字节的 CRLF 序列结尾。 UNIX 仅使用单字符换行符,因此额外字符在 UNIX 上被视为数据,因此(例如)是 shebang 上文件名的一部分。这意味着您不是寻找/bin/sh,而是让您的操作系统尝试运行不存在的/bin/sh$'\r',因此出现错误。

标签: linux shell openwrt


【解决方案1】:

感谢查尔斯·达菲的评论。这真的是 CR LF 问题。 虽然我在我的 linux 虚拟机中打开了该文件,但它已在 Windows 中进行了修改。所以即使在linux中,我使用的sublime文本编辑器会认为它是一个windows文件并使用crlf作为换行符结束。

所以,只需将 crlf 替换为 lf ,问题就解决了。

【讨论】:

    【解决方案2】:

    还值得检查一下你的 shebang 是否正确:#!/bin/sh 或 #!/bin/bash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多