我有一个bash脚本,我使用UltraEdit在Windows上编辑,并使用Unix Line Terminator样式保存为UTF-8 No BOM,如UE中“另存为”对话框中所指定。
然后我将它上传到运行parallels virtuozzo的centos 5 x86机器,每次,无论我如何上传它(FTP作为二进制文件,或通过parallels管理控制台),脚本都无法正常工作。当我通过parallels管理控制台查看脚本时,我发现最后一行,只有最后一行,其中有一个奇怪的字符。如果我从最后一行删除行终止符(让脚本以最后一个可打印字符结束)一切正常。
我的问题:
A)为什么只有LAST行终止符导致问题?
B)我将来如何避免这种情况?
谢谢!
答案 0 :(得分:2)
首先我会建议你转移为二进制..因为你似乎确切地知道你想要的格式..
ASCII /文本FTP在您不想要的时候也可以进行行结束转换。
答案 1 :(得分:2)
你可以运行dos2unix来摆脱它们。
答案 2 :(得分:2)
这里有两个问题:首先,假设编辑器使用Unix行结尾保存,您应该使用二进制FTP,而不是ASCII。第二,这很令人费解,编辑器似乎在文件末尾插入一个CTRL-Z
(自八十年代末AFAIK以来就没有必要)。
保存由单行组成的文件,通过常规方法将其传输到Unix系统并使用:
xxd myscript.sh
查看文件中的最后一个字节是0x1a
来验证我的理论是否正确。
答案 3 :(得分:2)
我在Ultraedit上使用了CTRL-H,它显示与unix的XXD命令相同的输出,我在那里看到0D 0A,尽管该文件设置为使用UNIX行终止符。这是一个Ultraedit问题。我正在使用v 13.20a。
我是stackoverflow的新手。我应该打开一个新问题还是重新标记这个问题?
感谢所有
答案 4 :(得分:2)
我在所有保存的新文件中在Ultraedit中设置了BOM(字节顺序标记)的类似问题,即使我没有选中此选项。这在Linux中造成了严重破坏。解决方案是将默认编码设置为ANSII。此设置至少在UltraEdit v18中。
高级>配置>编辑>新文件创建
编码类型:创建新文件为ANSII
答案 5 :(得分:1)
下一步是对文件执行hexdump并查看其中的内容。这听起来非常像那里有一个裸CR。请记住,回车意味着“在当前行的位置0中写下一个字符”。尝试运行hexdump -C file
甚至od -t x1 file
并查找0A
和0D
(0D
= CR,0A
= LF)。
答案 6 :(得分:0)
您可以远程编辑脚本。
emacs / vim / nano等适用于腻子。如果你喜欢emacs,你也可以使用tramp编辑远程文件,其中emacs运行在你碰巧坐在前面的任何机器上,虽然我没有使用tramp与windows。 komodo-edit也是远程编辑,虽然我强烈推荐komodo-edit,但我还没有使用远程功能。