问题

问题

问题

我们经常会破坏文件的行尾,导致程序在我们不知情的情况下停止运行。

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)。 有时我们会复制/粘贴,我认为这就是导致问题的原因。 是的,有时我们不测试我们的更改,原因不太好:相同的脚本在复制服务器上运行,更改只是缩进一些行,等等。我同意应该解决这个问题。

不计划使用类似 Chef/Puppet 的解决方案。

更新

TLDR 复制粘贴不是问题,FTP 才是问题。

我对在 Windows + Notepad++ + PuTTY + nano 和 vi 上复制/粘贴 Windows 行尾 CRLF 进行了一些测试。看起来 CR (^M) 字符被过滤了,只有 LF 被粘贴到文件中。感谢 ewwhite 让我对复制/粘贴理论产生了怀疑!

我使用 FileZilla 通过 FTP 传输了一个以 CRLF 结尾的文件,将“发送模式”选项设置为自动。CRLF 被保留了下来。我想知道 FileZilla 是否可以将它们转换为 LF。

减轻

我们不能禁止非Linux操作系统,也不能禁止复制粘贴。

我想到过以下解决方案:

  1. 构建一个在所有脚本上运行 dos2unix 或 sed 的 cron.minutely。缺点:我们需要维护一个“可修改文本文件”列表,因为我不想让它在 / 上运行
  2. 使用可在文件更改后支持附加命令的文本编辑器。缺点:可能会破坏合法使用非 Linux 行尾的文件,在我们 ftp 脚本时不起作用。
  3. 使用触发系统http://inotify.aiken.cz/?section=incron&page=about&lang=en. 缺点:?

#2 和 #3 的优点:我们还可以使用它们为需要它的程序添加最后的空白行。

使用 bash,版本 4.2.37(1)-release

有关 ^M (CRLF) 的相关问题

编辑:我被投了一张反对票,你能解释一下原因吗?

答案1

我有时必须处理一些遗留系统的问题。有时,组织源代码管理中保留的文件(宝兰星队) 设置为错误的换行配置。

但在多个跨平台环境中工作时,复制/粘贴不应单独导致此问题。尝试根据以下输出确定趋势,并适当处理最严重的违规者。

定期搜索带有 DOS 换行符的文件。

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在某些系统上会修改权限...

相关内容