Windows 和 \r\n (CRLF) 和 \n (LF) 的 Unix 之间的可移植性错误?
Portability Bug between Windows and Unix of \r\n (CRLF) and \n (LF)?
当我在 windows 平台
中为 Shell 脚本编写代码时
#!/bin/bash
a=20
b=10
sum=`expr $a + $b`
echo $sum
但尝试在 UNIX 平台上执行它时出现错误 '20\r': command not found
,因为 Windows 文件以 /r/n 结尾,而 UNIX 文件以 /n 结尾。
知道如何消除和处理此类错误吗?
使用 dos2unix
- “[a] 将 DOS/MAC 格式的纯文本文件转换为 UNIX 格式的程序” - 或类似的命令。
像 Git 或 Hg 这样的储存库他们有 support for 'line ending normalization'。由于其他原因,使用版本控制系统也很棒!
如果通过 [S]FTP/SCP 传输(例如 WinSCP)为传输指定 "TEXT mode" 转换将自动完成 - 换行符转码作为copy/transfer 进程本身。
许多 "advanced" 文本编辑器(例如 [x]emacs、[g]vim、sublime、notepad++,甚至 Visual Studio)也可以 repair/normalize 这样的文件。这些编辑器也可以用来从头开始写文件:)
当我在 windows 平台
中为 Shell 脚本编写代码时#!/bin/bash
a=20
b=10
sum=`expr $a + $b`
echo $sum
但尝试在 UNIX 平台上执行它时出现错误 '20\r': command not found
,因为 Windows 文件以 /r/n 结尾,而 UNIX 文件以 /n 结尾。
知道如何消除和处理此类错误吗?
使用 dos2unix
- “[a] 将 DOS/MAC 格式的纯文本文件转换为 UNIX 格式的程序” - 或类似的命令。
像 Git 或 Hg 这样的储存库他们有 support for 'line ending normalization'。由于其他原因,使用版本控制系统也很棒!
如果通过 [S]FTP/SCP 传输(例如 WinSCP)为传输指定 "TEXT mode" 转换将自动完成 - 换行符转码作为copy/transfer 进程本身。
许多 "advanced" 文本编辑器(例如 [x]emacs、[g]vim、sublime、notepad++,甚至 Visual Studio)也可以 repair/normalize 这样的文件。这些编辑器也可以用来从头开始写文件:)