问题
在win上写好shell脚本,传到linux服务器运行调试的时候报错:
test.sh: line 2: $'\r': command not found
原因
这个错误是由于脚本文件的换行符问题引起的。Windows和Linux系统的换行符不同:
- Windows使用\r\n(回车+换行)。
- Linux使用\n(换行)。
脚本是在Windows上编辑的,然后放到Linux上运行,可能会导致\r被解释为脚本的一部分,从而引发错误。
方案
使用sed命令移除脚本中的\r:
sed -i 's/\r$//' test.sh
解释:
1. **`sed`**: 是一个流编辑器,用于处理文本。 2. **`-i`**: 表示直接修改文件内容(即“原地编辑”)。 3. **`'s/\r$//'`**: 是 `sed` 的替换命令。- `s/`: 表示替换操作。- `\r`: 匹配回车符(Windows 换行符的一部分)。- `$`: 匹配行尾。- `//`: 替换为空,即删除匹配的内容。 4. **`test.sh`**: 是要处理的文件名。