Hon*_*hen 5 unix shell newline dos
首先我会说我已经阅读过这篇文章但是我仍然有问题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 -
Run Code Online (Sandbox Code Playgroud)
然而:
cat build_test.sh它什么都不输出. more build_test.sh它输出:cd - install/llvm-obj/tools/TEST_TOOL/Y_TOOL/$1 test.cppless 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
Run Code Online (Sandbox Code Playgroud)
在这篇文章之后,^M不再存在,但是没有更多的换行符:-(
结果file build_test_no_cr.sh现在是:
build_test_nocr.sh: ASCII text, with no line terminators
Run Code Online (Sandbox Code Playgroud)
解决方案可以在这里看到.
但是我仍然想为什么不cat显示任何内容并more显示如此奇怪的结果.此外,为什么dos2unix和set fileformat=unixVim在这种情况下失败了.
PS:我想这也许是我的编辑器(Vim的或leafpad?)只产生\r相当\n的换行符.怎么会这样?
fge*_*fge 11
\r新行的简单终止符是"旧Mac"行终止符,奇怪的是2012 +中的编辑器甚至生成带有这种行终止符的文件......无论如何,您可以使用mac2unix命令,它是dos2unix分发的一部分:
# Edits thefile inline
mac2unix thefile
# Takes origfile as an input, outputs to dstfile
mac2unix -n origfile dstfile
Run Code Online (Sandbox Code Playgroud)
此命令不会使已经预期行终止符的文件变为munge文件,这是一个奖励.而reverse(unix2mac)也存在.
注意与之mac2unix相同dos2unix -c mac.
此外,如果使用vim,则可以通过执行来强制执行UNIX行结束
:set fileformat=unix
:w
Run Code Online (Sandbox Code Playgroud)
或者只是添加
set fileformat=unix
Run Code Online (Sandbox Code Playgroud)
到你的.vimrc文件
我终于发现我可以使用以下命令:
tr '^M' '\n' <build_test.sh >build_test_nocr.sh
Run Code Online (Sandbox Code Playgroud)
^M通过按Ctrl+v和Enter键将位置添加。或者,具有相同的效果:
tr '\r' '\n' <build_test.sh >build_test_nocr.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11457 次 |
| 最近记录: |