从windows上传一个shell脚本到linux(通过linux下rz二进制方式传送),执行该脚本时出错:
+ $'\r'
: command not foundline 2:
multithread.sh: line 48: syntax error: unexpected end of file
查看文件发现,脚本总共才47行,根本没有48行。
怀疑是从windows传送文件时文件格式有问题,在windows下换行符为两个字符/r(回车)/n(换行),而在linux下换行符只需要一个字符/n,所以多出一个/r控制符。
在vim下set list,没有发现可以的控制字符,不知道怎么回事。
使用dos2unix对文件格式进行了调整:
$ dos2unix multithread.sh
dos2unix: converting file multithread.sh to UNIX format
格式化完毕后发现文件果然变了,
-rw-r--r-- 1 wangkun wangkun 1232 Nov 2 23:51 multithread.sh
-rw-r--r-- 1 wangkun wangkun 1281 Nov 2 23:45 multithread.sh.bk
连大小都变了。又vim进去看了一下,还是没发现有什么不同。但diff了一下内容,发现内容全都显示出来,表明全都不同。
突发奇想,使用rz命令以ASIIC格式重新传了一下文件,竟然直接就可以执行了,看来在windows和linux下传输脚本时选择ASIIC格式传输是比较保险的一种方式。