今天在写一个Java项目时,需要调用一个外部的shell脚本来完成一些额外的操作。
之前一切正常,但是在本次部署调用脚本的时候却一直报以下错误:
[ ~]$ ./sync.sh -bash: ./sync.sh: /bin/sh^M: bad interpreter: No such file or directory
反复查看脚本没有发现问题,求教于google,最终发现居然是文件的格式错了。
使用vi命令编辑脚本,输入:set ff?
发现文件是dos格式:
是了,因为之前一直在Linux上编写shell脚本所以一切正常,本次因为要提交到版本库将它加入到SVN后在windows操作了一把,导致换行符由\n
变成了\r\n
,Linux不能正确识别了。
既然如此,我们把它强制转换过来,还是使用vi命令,输入:set ff=unix
,强制转换成unix格式,保存退出。
再次执行程序调用脚本,一切正常了!