执行shell脚本时出现“?#!/usr/bin/sh:未找到”的错误提示。

3

我有一个名为autoinstall的脚本:

#!/usr/bin/sh
echo "Installasi membutuhkan free space minimal 2MB, pastikan ada punya cukup space di router anda"
read -p "Anda yakin ingin melanjutkan installasi?(y/n) " -n 1 -r
echo ""
if [[ $REPLY = ^[Yy]$ ]]
then
    cd /
    cd /tmp/
    tar -xvf OpenWrt_Angel_Beats_Edition_v1.3.3.tar -C /
    chmod -R 744 /root/crt
    chmod 744 /www/wget/wget_download.sh
    chmod 744 /usr/bin/gsm
    chmod 744 /usr/bin/profile
    opkg update && opkg install elinks
    cp /etc/rc.local /etc/rc.local.backup
    cat > /etc/rc.local << END
    #!bin/sh
    # /etc/rc.local: Local system initialization script.
    #
    # Put any local startup commands in here. Also, if you have
    # anything that needs to be run at shutdown time you can
    # make an /etc/rc.d/rc.local_shutdown script and put those
    # commands in there.
    sh /www/wget/wget_download.sh > /dev/null 2>&1 &
    exit 0
END
    killall sh /www/wget/wget_download.sh
    sh /www/wget/wget_download.sh > /dev/null 2>&1 &
    echo "File backup /etc/rc.local.backup telah dibuat, gunakan file ini untuk mengembalikan konfigurasi rc.local anda yang dulu jika diperlukan"
    echo "Installasi selesai. Jangan lupa di akun openvpn yang digunakan (/root/crt/xxx.ovpn) tambahkan baris ini:
    script-security 2
    up client-connect.sh"
else
    echo ""
    echo "Installasi dibatalkan"
fi

我输入的每个命令都会出现上面的错误(第一行:xxx未找到),我确定我已经正确地输入了命令,甚至echo也会出现这样的错误,我该怎么解决?


你已经运行了/usr/bin/sh进行测试吗? - Hunter Zhao
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Don
你用什么来编辑脚本?是在Windows机器上吗?这可能是一个BOM问题吗?file <script>命令输出了什么? - Etan Reisner
我在Windows 7上使用Notepad ++,并在安装了OpenWrt的路由器上运行它。您所说的“file <script>”是什么意思? - Don
2个回答

6
这里可能会有两个问题:
  1. 文件不存在。通常情况下,对于sh,路径是/bin/sh,因此应该是#!/bin/sh

  2. 您在Windows上编辑文件。Windows使用CR+LF作为行结尾符。 Unix(和Linux)只使用LF。 因此,对于Linux,命令读取“执行/bin/sh<CR>”,而sh<CR>不存在。

解决方案:编辑文件时,请确保使用Unix行结尾符。

1
该文件可能已经使用插入Unicode BOM(字节顺序标记)的编辑器进行了编辑。
请查看第一行内容:
od -c autoinstall | head -1

或者

hd -n 16 autoinstall

如果您在#!/usr/bin/sh之前看到意外字符,您可以尝试这里描述的方法之一使用awk去除字节顺序标记来删除BOM。

2
谢谢,问题已解决。我通过打开Notepad++ -> 编码 -> 选择UTF-8 Without BOM编码,然后重新保存文件,问题得以解决。非常感谢! - Don
1
一样的情况。清除了BOM,消息就消失了。 - Matthew MacFarland

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