【发布时间】: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',因此出现错误。