我最近安装了Debian的新版本。我创建了这个简单的脚本:
#!/bin/bash
print_something () {
echo Hello I am a function
}
print_something
print_something
但是,这会在我发出bash test.sh
的我向我显示此错误:
test.sh: line 3: $'r': command not found
test.sh: line 4: syntax error near unexpected token `$'{r''
'est.sh: line 4: `print_something () {
我在做什么错?非常感谢!
诊断:
- unix实用程序一般期望线路结尾仅为
n
,通常会破坏或显示出具有Windows式rn
线路结尾的文件的意外行为和输出 - 就像bash
一样。 - 包含 String的错误消息
r
是存在这样的Windows风格的线路结束的指标。 - 将文件传递到
cat -v
并在输出线结束时检查^M
的输出(这是r
chars。表示的方式)是一种检查Windows风格的线路结尾的文件。
修复:
- 将带有Windows风格的线路结尾的文件转换为Unix风格的文件:
- 如果已经安装了
dos2unix
实用程序(通常是不是),或安装它是一个选项;如何安装取决于您的平台;例如。:- 在Ubuntu上:
sudo apt-get install dos2unix
- 在OSX上,安装了自制的
brew install dos2unix
- 在Ubuntu上:
- 或者,使用标准实用程序执行转换;有几种选择;例如。:
-
sed $'s/r$//' win.txt > unix.txt
-
awk 'sub("r$", "")+1' win.txt > unix.txt
- 上述命令的变体可以更新文件,但它们是,如果有的话。
-
- 如果已经安装了
- 确保您用于创建shell脚本/文件的编辑器配置为使用Unix风格的线路结尾。
我通过安装dos2unix
然后转换文件解决了问题。非常感谢MKEment0指出了这一点。