4

我有一个 bash 脚本,我使用 UltraEdit 在 Windows 上编辑并保存为 UTF-8 No BOM,使用 Unix Line Terminator 样式,如 UE 中的“另存为”对话框中指定的那样。

然后我将它上传到运行parallels virtuozzo 的centos 5 x86 机器,并且每次,无论我如何上传它(FTP 作为二进制文件,或通过parallels 管理控制台),脚本都不会工作。当我通过并行管理控制台查看脚本时,我看到最后一行,只有最后一行,其中有一个奇怪的字符。如果我从最后一行删除行终止符(让脚本在最后一个可打印字符处结束)一切正常。

我的问题:

A)为什么只有 LAST 行终止符会导致问题?

B)我将来如何避免这种情况?

谢谢!

4

7 回答 7

2

我在 Ultraedit 上使用了 CTRL-H,它显示的输出与 unix 的 XXD 命令相同,并且我在其中看到了 0D 0A,尽管该文件设置为使用 UNIX 行终止符。这是一个 Ultraedit 问题。我正在使用 v 13.20a。

我是stackoverflow的新手。我应该打开一个新问题还是重新标记这个问题?

谢谢大家

于 2009-07-26T17:08:51.517 回答
2

首先,我建议您以二进制格式传输.. 因为您似乎确切地知道您想要的格式..

当您不想要它时,ASCII/文本 FTP 以进行行尾转换而闻名。

于 2009-07-24T17:18:24.740 回答
2

在 Ultraedit 中为所有保存的新文件设置 BOM(字节顺序标记)时,我遇到了类似的问题,即使我没有选中此选项。这在 Linux 中造成了严重破坏。解决方案是将默认编码设置为 ANSII。此设置至少在 UltraEdit v18 中。

高级 > 配置 > 编辑器 > 新文件创建

编码类型:创建新文件为 ANSII

于 2012-08-07T12:45:36.657 回答
2

你可以运行 dos2unix 来摆脱它们..

于 2009-07-25T01:01:44.980 回答
2

这里有两个问题:首先,假设编辑器以 Unix 行结尾保存,您应该使用二进制 FTP,而不是 ASCII。其次,这令人费解,编辑器似乎CTRL-Z在文件末尾插入了 a(自 80 年代末以来一直没有必要 AFAIK)。

保存由单行组成的文件,通过通常的方式将其传输到 Unix 系统并使用:

xxd myscript.sh

查看文件中的最后一个字节是否是0x1a为了验证我的理论是否正确。

于 2009-07-25T01:10:36.263 回答
1

下一步是对文件进行 hexdump 并查看其中的内容。这听起来很像那里有一个裸露的 CR。请记住,回车的意思是“在当前行的位置 0 写入下一个字符”。尝试运行hexdump -C file或什od -t x1 file至并寻找0A0D0D=CR,0A=LF)。

于 2009-07-24T17:56:53.010 回答
0

你可以远程编辑脚本。

emacs/vim/nano 等在 putty 上运行良好。如果你喜欢 emacs,你也可以使用 tramp 来编辑远程文件,emacs 在你碰巧坐在前面的任何机器上运行,尽管我没有在 windows 上使用 tramp。komodo-edit 也可以作为远程编辑,虽然我强烈推荐 komodo-edit,但我没有使用远程功能。

于 2009-07-25T09:06:04.723 回答