【发布时间】:2015-12-22 21:38:21
【问题描述】:
我的基于 Perforce 的项目支持具有相同 shell 脚本的 Linux 和 Cygwin 平台(例如 build_project.sh)。但是 Perforce 将文本文件的行尾默认设置为本地平台 (Docs)。这会导致 .sh 脚本中的 \r\n 换行符在 Cygwin 上失败。
到目前为止我想到的一些想法:
-
有没有办法让 Cygwin 接受 \r\n 文件?(无需运行
dos2unix,文件以只读方式获取)。 有没有办法将特定文件设置为文本,但每个人都使用 Unix 行结尾?(我猜是“不”,但我想我会检查一下。)
当然,我可以将整个工作区的行尾设置为
\n(unix)。但这让 Windows 客户端对他们的.bat文件是\n而不是\r\n感到不满。此外,如果设置是针对每个工作区的(我不记得了),那么对于新的 Windows 用户来说,工作区设置会稍微困难一些,因为他们必须设置该选项。将
.sh文件设置为“二进制”,但随后我们会丢失这些文件上的文本差异。 有解决办法吗?这是常见的(好的)黑客吗?
这是一个相当小的问题,但我怀疑你们中的一些人有这种模式的 BKM。
谢谢。
编辑:克雷格在this question 中的回答似乎表明,如果最初以这种方式提交,使用 Unix 行结尾只会留下带有\r\n 的文件。
编辑:要强制 bash(即 Cygwin)接受带有 \r\n 结尾的文件,可以在脚本中指定 set -o igncr。如果希望 Cygwin 用户可能不太懂 Unix(我的情况),或者由于某些其他原因我们无法在下面的解决方案中全局强加触发器,这很好。
【问题讨论】: