从 WinSCP 编辑远程文件时保留换行符

Preserve new line characters when editing remote file from WinSCP

据我了解,如果我在我的 Solaris 服务器上创建一个文件,我将自动获得 LF 结束行。

设置: 我远程登录到 Windows 服务器(只要我连接到它就没有互联网)。在这个 Windows 服务器上,我使用 Winscp 登录到 solaris 服务器。

问题: 当我在 Solaris 服务器上创建文本文件时(使用 WinSCP),我可以使用 Notepad++ 打开它。当我打开文件时,它总是以 CRLF 作为换行符,我不知道为什么。然后我通过使用 'find and replace' 从 '/r/n' 到 '/n' 将 CRLF 字符更改为 LF。当我查找并替换时,我看到换行符已更改为 'LF'。但是,一旦我保存文件并重新打开它,我们就会返回 'CRLF'。

难道是notepadd++向我显示了错误字符,也许与通过WinSCP打开Solaris文件有关?

或者我应该使用 shell 脚本 (bash) 制作文件?

即使我使用 shell 脚本制作文件,我如何确定该文件中的换行符是 LF 而不是 CRLF(有没有办法在终端上做到这一点?),因为对现在我正在使用 Notepad++,当我重新打开文件时,它总是将 CRLF 显示为换行符。

目标: 我想要的只是简单地创建任何以 'LF' 作为换行符的文本文件。我正在使用 Solaris bash.

有一些选择。您可以设置 Notepad++ 来创建 Unix 风格的文本文件。另一种选择是设置 scp 以便它以文本模式传输文本文件。第三个选项,但是每次 运行 可能有些不方便 - dos2unix 命令正是你需要的 第四个选项是在 Unix 终端中使用 vi 或某些编辑器。我认为没有必要为此编写脚本。

winscp 所做的是它打开了一个内部文本编辑器供您输入文本内容。它以您指定的名称保存到 Windows 计算机本地的临时文件中,最后以 ascii 模式将其传输到 Solaris。

当您将它下载到 Windows 时,它很可能也是以 ascii 模式下载的。结果,更改行字符被转换为 Windows 风味 CR+LF。

看起来不错。如果您想确定它,我建议您使用 Solaris 上的编辑器检查文件内容,例如 vi。 Winscp 有一个菜单选项 Commands -> Open in PuTTY 为您服务。

默认情况下,WinSCP 不会转换 EOL 序列以在外部编辑器中编辑文件,除非编辑器是 Windows 内置的 notepad.exe

所以你必须自己在首选项中启用转换。

请参阅 Editor Preferences dialog 上的 对在外部编辑器中编辑的文件强制文本传输模式 选项:

关闭该选项后,您将在 Notepad++ 中打开与服务器上存储的文件完全相同的文件。