据我所知,每个操作系统都有不同的方式来标记行尾 (EOL) 字符。商业操作系统使用 EOL 回车(Windows 上的回车和换行,Mac 上仅回车)。另一方面,Linux 仅对 EOL 使用换行符。
为什么 Linux 不使用 EOL 回车(而仅使用换行符)?
我不明白为什么会出现此错误:
line 1: #!/bin/bash: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在运行任何像这样的 bash 脚本时:
#!/bin/bash
echo "pouet"
Run Code Online (Sandbox Code Playgroud)
我试过在 Fedora 19 上运行它,一切顺利。
我在 Debian 7 上,我尝试解析要搜索的第一行,\n\r但一切都很干净(到目前为止我制作的每个脚本似乎都以相同的方式运行)。
我$PATH是这样的:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。我用普通用户或 root 尝试过,结果相同。但脚本的其余部分似乎表现正常(回显被解释)。是的,/bin/bash存在并且是可执行的。
$ LC_ALL=C sed -n l < tesT.sh
\357\273\277#!/bin/bash$
echo "pouet"$
Run Code Online (Sandbox Code Playgroud) 看看这两个文件:
它们在我看来完全相同,但文件 1 有 41 个字节,文件 2 有 44 个字节。
现在,我不会关心 3 个额外的字符,但是,我认为这些字符也会导致一个奇怪的错误:当我克隆并运行这些文件时,文件 1 运行正常,而文件 2 在第 3 行返回错误:“./ BasicCheck.sh: line 3: cd: case0 : No such file or directory"。
那么:这些额外的字符是什么?为什么它们会导致错误?我应该怎么做才能修复这些错误?
我的猜测是它们是换行符——也许文件 1 有基于 Linux 的换行符,而文件 2 有基于 Windows 的换行符。这是正确的吗?为什么它会导致这样的错误?
我有以下提示
[/share/registrazioni/Script] # cat delete_7gg.sh
#!/bin/sh
find /share/registrazioni/ -type f -mtime +7 -delete
[/share/registrazioni/Script] # which sh
/bin/sh
[/share/registrazioni/Script] # chmod +x delete_7gg.sh
[/share/registrazioni/Script] # ./delete_7gg.sh
-sh: ./delete_7gg.sh: /bin/sh^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么我得到 /bin/sh^M: bad interpreter: No such file or directory ?我用vi制作了脚本。我在可以通过 ssh 访问的 qnap qts 4.3.6 中制作了脚本。该脚本应该简单地删除超过 7 天的文件。我无法安装 dos2unix,因为系统没有包管理器。我只是希望制作一个脚本并将其放入 cron 中。但我收到了那个错误。
这是 BASH 脚本:
#!/bin/bash
read -p "Type in a color name, please: " COLOR
case "$COLOR" in
green | red | yellow)
echo -n "nice colors!"
;;
*)
echo -n "meh..."
;;
esac
Run Code Online (Sandbox Code Playgroud)
x为用户设置脚本权限后,我运行它但得到以下信息:
[inewton@centos7 LPIC1-exercises]$ ./colors.sh
Type in a color name, please: pink
./colors.sh: line 12: syntax error near unexpected token `newline'
'/colors.sh: line 12: `esac
[inewton@centos7 LPIC1-exercises]$
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?请帮帮我。