如题,python脚本在windows编辑后,在linux下执行提示 /usr/bin/python^M: bad interpreter: No such file or directory
看到^M应该是隐藏字符,原因就是windows行尾和liunx行尾标识符不一致,不同系统间行尾表示如下:
不同系统间的行尾表示
UNIX格式,每行的行尾都是用一个0x0a字符(换行字符LF)表示的,
而在WINDOWS/DOS下每行的行尾都是用0x0d 0x0a两个字符(回车字符CR,换行字符LF)表示的,
MAC机,每行的行尾都是0x0d字符表示,即回车字符CR。
(经我用winhex查看,确实如此——yockie注)
在很多计算机语言中, <CR>表示为字符或字符串是\r, 而<LF>表示为字符或字符中是\n.
而在printf这样的函数中, 如果你出现一个\n, 它却代表了一个逻辑上的意义, 即它代表在本地系统上的那种回车换行, 所以它在UNIX上只是<LF>, 但如果你在DOS上用诸如Truboc编程的话它输出的是<CR><LF>
所以不同系统之间传输交换文件的时候,会出现问题;
1)Unix或linux上有个小工具, 专门在两种文件格式之间进行转换, 叫unix2dos, dos2unix.或在
vim中, 如果你想把一个文件存为另一种文件格式, 只需:set fileformat=unix或等号后面是dos, mac即可, 接下来的存盘动作就会自动把你的文件存为指定平台的格式.
2)在UltraEdit的 File->Conversions(有些版本是在Format -> Convert to..)菜单中, 有三个子菜单项就是专供你在各种文本格式之间转换的.
必须先将UNIX文本格式转换为DOS格式的。UltraEdit的FILE菜单中提供了对单个文件进行这种转换的能力,也可以实现批量转换。在UE中选择Search | Search in files菜单,在Find框中填写^n(表示UNIX文件中的回车换行符号),在Replace with中输入^p(表示DOS文件中的回车换行符号),全部替换后,就可以实现批量替换了。
不同系统间ftp使用注意事项:
一些ftp的客户端程序会自动进行各个平台的文本文件格式转换. 所以要注意你在ftp中用ls看看到的文件大小未必是你下载下来的文件大小. 上传过程也是一样.
如果你不想ftp这样自作主张只要用bin命令即可. 它会告诉ftp进行逐字节的二进制模式传输.
在winodows编辑后,导致liunx下文件格式错乱,解决方法:
1)在windows上,用UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可
2)在linux上直接替换把不可见字符去掉 sed -i 's/^M//g' filename (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
3)在liunx上转换文件的格式vim filename :set ff可以查看文件格式会显示fileformat=mac dos 或者unix等等 直接 :set ff=unix :wq保存退出即可。