6

首先我会说我已经阅读了这篇文章,但是我仍然对CR line terminators.

有一个名为 的文件build_test.sh,我在其中进行了编辑,leafpad它可以直接显示在Vim

cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp 
cd ~/moonbox/llvm-obj/tools/TEST_TOOL/
make
make install
cd -

然而:

  1. 使用它什么也没cat build_test.sh输出。
  2. 使用more build_test.sh它输出:cd - install/llvm-obj/tools/TEST_TOOL/Y_TOOL/$1 test.cpp
  3. 使用less build_test.sh它输出:cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp^Mcd ~/moonbox/llvm-obj/tools/TEST_TOOL/^Mmake^Mmake install^Mcd -

结果file build_test.sh是:

build_test.sh: ASCII text, with CR line terminators

这篇文章之后^M不再存在但是没有更多的换行符:-(现在
的结果file build_test_no_cr.sh是:

build_test_nocr.sh: ASCII text, with no line terminators

解决方案可以在这里看到。

但是我仍然想知道为什么cat什么都不显示并且more显示如此奇怪的结果。此外,为什么dos2unixset fileformat=unix在 Vim 中失败了这种情况。

ps:我想也许我的编辑器(VimLeafpad?)只生成换行符。怎么会这样?\r\n

4

3 回答 3

11

换行符的简单\r终止符是“旧 Mac”行终止符,奇怪的是 2012+ 中的编辑器甚至生成带有这种行终止符的文件......无论如何,您可以使用该mac2unix命令,它是dos2unix分发的一部分:

# Edits thefile inline
mac2unix thefile
# Takes origfile as an input, outputs to dstfile
mac2unix -n origfile dstfile

此命令不会删除已经预期行终止符的文件,这是一个奖励。反之(unix2mac)也存在。

请注意,mac2unix与 相同dos2unix -c mac

于 2012-12-29T09:19:27.340 回答
10

此外,如果您使用 vim,您可以通过执行

:set fileformat=unix
:w

或者只是添加

set fileformat=unix

到你的 .vimrc 文件

于 2012-12-29T09:38:10.940 回答
6

我终于想通了,我可以使用这个命令:

tr '^M' '\n' <build_test.sh >build_test_nocr.sh

where^M是通过按Ctrl+vEnter键添加的。或者,这具有相同的效果:

tr '\r' '\n' <build_test.sh >build_test_nocr.sh
于 2012-12-29T10:26:05.207 回答