第 1 行:?#!/usr/bin/sh:尝试执行 shell 脚本时未找到
line 1: ?#!/usr/bin/sh: not found when trying to execute a shell script
我有一个名为 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
我在第一行输入的每条命令总是会出现上面的错误 (line 1:xxx not found
),而且我确定我输入的命令是正确的,即使 echo
也会出现类似这样的错误那,我该如何解决这个问题?
这里可能有两个问题:
文件不存在。通常,对于sh
,路径是/bin/sh
,所以应该是#!/bin/sh
您正在 Windows 编辑文件。 Windows 使用 CR+LF 作为行尾。 Unix(和 Linux)只使用 LF。因此对于 Linux,命令显示为“执行 /bin/sh<CR>
并且 sh<CR>
不存在。
解决方案:编辑文件时,确保使用 Unix 行结尾。
可能已使用插入 Unicode BOM(字节顺序标记)的编辑器对文件进行了编辑。
查看第一行内容:
od -c autoinstall | head -1
或
hd -n 16 autoinstall
如果您在 #!/usr/bin/sh
之前看到意外字符,您可以尝试此处描述的方法之一 Using awk to remove the Byte-order mark 来删除 BOM。
我有一个名为 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
我在第一行输入的每条命令总是会出现上面的错误 (line 1:xxx not found
),而且我确定我输入的命令是正确的,即使 echo
也会出现类似这样的错误那,我该如何解决这个问题?
这里可能有两个问题:
文件不存在。通常,对于
sh
,路径是/bin/sh
,所以应该是#!/bin/sh
您正在 Windows 编辑文件。 Windows 使用 CR+LF 作为行尾。 Unix(和 Linux)只使用 LF。因此对于 Linux,命令显示为“执行
/bin/sh<CR>
并且sh<CR>
不存在。
解决方案:编辑文件时,确保使用 Unix 行结尾。
可能已使用插入 Unicode BOM(字节顺序标记)的编辑器对文件进行了编辑。
查看第一行内容:
od -c autoinstall | head -1
或
hd -n 16 autoinstall
如果您在 #!/usr/bin/sh
之前看到意外字符,您可以尝试此处描述的方法之一 Using awk to remove the Byte-order mark 来删除 BOM。