1.问题 /bin/bash^M
在Linux下执行shell脚本时出现以下问题:
/bin/bash^M:bad interpreter: No such file or directory
问题发生的背景常常是我们将windows下写好的shell脚本拷贝到Linux去执行
2.原因
实际上,Windows/DOS下脚本文件每行是以\r\n作为行终止符的,而Unix系统通常是以\n作为行终止符。所以Linux下的bash在解析我们从windows上拷贝过去的脚本文件时,识别不了多出来的\r(在Linux上终端显示出来就是^M)。
在 Linux终端下下我们可以执行命令 cat -v来看到脚本文件中的^M
cat -v myscript.sh
3.解决办法
1.办法一 :set ff=unix
用vi或vim打开进入到这个脚本文件中,然后设置其文件格式为unix风格
注意:进入vim执行任何命令前,最好先按一下Esc
:set ff //查看当前文件的风格
:set ff=unix //设置当前文件风格为unix
:wq //保存并退出
2.办法二 tr -d ‘\r’
使用tr命令删除字符 \r
tr -d '\r' < myscript.sh
参数解释: -d, —delete:删除指令字符 < 输入重定向,这里把我们的脚本文件作为输入源
3.办法三 sed -i
通过sed命令与正则的配合将行尾的\r替换为空:
sed -i 's/\r$//' xxx.sh
参数解释: 命令格式:sed ‘s/要被取代的字串/新的字串’ -i 直接修改读取的文件内容,而不是输出到终端
s 取代命令
$表示位于行尾
