Linux shell脚本未找到,但它确实存在。

4
我在Openwrt上创建了一个名为“/etc/aaa”的shell脚本,其中包含以下代码:
    #!/bin/sh
    echo "Hello World!"

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

chmod 777 /etc/aaa

当使用以下任意一种命令时执行

sh /etc/aaa

或者

ash /etc/aaa

它可以正常工作并打印出“Hello World”。但问题在于当我使用以下命令来执行它时:

/etc/aaa

我在哪里遇到了这个错误:

-ash: /etc/aaa: not found

请问有人能解释一下为什么会发生这种情况吗?我错过了什么吗?


不,我已经使用了“chmod 777 /etc/aaa”,我不认为这与权限有关。抱歉,我忘记提到了。 - demonguy
5
DOS换行符?可能只在第一行(shebang)出现? - Etan Reisner
2
回复:“DOS 换行符” - 如果您的文件是在 Windows 中创建的,而没有使用理解 UNIX 文本文件的编辑器,则其行将以两个字节的 CRLF 序列结尾。UNIX 仅使用单个字符换行符,因此在 UNIX 上,额外的字符被视为数据,例如 shebang 上的文件名的一部分。这意味着,您不会寻找 /bin/sh,而是让您的操作系统尝试运行 /bin/sh$'\r',但该文件不存在,因此会出现错误。 - Charles Duffy
当您在 /etc 中创建一个可执行文件时会发生什么?为了明确起见,不是将文件通过 FTP 上传到其中,而是从头开始创建它? - tvCa
可能是重复的问题:bash脚本总是打印“Command Not Found” - tripleee
显示剩余5条评论
2个回答

17

感谢Charles Duffy的评论。它确实是CR LF问题。虽然我在Linux虚拟机中打开文件,但由于它在Windows中被修改过,所以即使在Linux中,我使用的Sublime文本编辑器也会认为它是Windows文件并使用crlf作为换行符。

因此,只需将crlf替换为lf即可解决该问题。


6
值得检查的是您的shebang是否正确,可以是:#!/bin/sh或#!/bin/bash。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接