我们经常打破我们的文件结尾,事情停止工作,没有我们注意到。
Bash抱怨“无效选项”或“:找不到命令”,如下所述: http : //thinkinginsoftware.blogspot.ca/2012/11/linux-server-cries-for-linux-desktop.html
我担心这可能会破坏其他文本文件(conf,crons …)
我们是一群使用Windows,Mac或Linux在一台服务器上编辑Linux文件的人。 我们手动编辑这些文件(ssh + vi / nano或者localy + ftp)。 有时我们复制/粘贴,我认为这是造成这个问题的原因。 是的,有时我们不会为了不太好的原因而testing我们的更改:相同的脚本在复制服务器上工作,更改只是缩进一些行等。 我同意这应该解决。
没有计划使用Chef / Puppet-like解决scheme。
TLDR复制粘贴不是问题,FTP是。
我在Windows + Notepad ++ + PuTTY + nano和vi上做了一些复制/粘贴Windows行尾的CRLFtesting。 它看起来像CR(^ M)字符被过滤,只有LF被粘贴到文件。 感谢ewwhite让我怀疑复制/粘贴理论!
我使用FileZilla通过FTP传输了一个CRLF结尾的文件,选项“发送模式”为自动。 CRLF被保留。 我不知道FileZilla是否可以将它们转换为LF。
我们不能禁止非Linux操作系统,也不能禁止复制粘贴。
我想到了这些解决scheme:
#2和#3的优点:我们也可以使用这些为需要它的程序添加最后的空白行。
使用bash,版本4.2.37(1) – 释放
编辑:我有一个downvote,你能解释为什么吗?
我必须偶尔处理一些遗留系统。 有时保留在组织的源代码控制( Borland Starteam )中的文件被设置为错误的换行configuration。
但是在许多跨平台环境中工作,复制/粘贴不应该单独引起这个问题。 尝试根据以下的输出来识别趋势,并适当地处理最坏的犯罪者。
使用DOS换行定期search文件。
find /var/www -not -type d -exec file "{}" ";" | grep CRLF
例:
# find /ppro/bin -not -type d -exec file "{}" ";" | grep CRLF /ppro/bin/compile/save/srcfix.c: ASCII C program text, with CRLF line terminators /ppro/bin/compile/bldtag.c: ASCII Pascal program text, with CRLF line terminators /ppro/bin/compile/bldtag.c.sav: ASCII Pascal program text, with CRLF line terminators /ppro/bin/compile/dbcsum2.c: ASCII Pascal program text, with CRLF line terminators /ppro/bin/hphw/print_sv.c: ASCII text, with CRLF line terminators /ppro/bin/linuxhw/dhcpd.conf: ASCII text, with CRLF line terminators /ppro/bin/linuxhw/dhcpd.conf.mult_subnet: ASCII text, with CRLF line terminators
然后烧他们!
请记住,某些系统上的dos2unix将修改权限…