我在 Windows 上创建了一个记事本文件并将其复制到 Ubuntu。该文件包含一些 iptables 规则。使用chmod +x
并执行该文件后,该文件无法正常工作。
然而,当我创建一个 Ubuntu (编辑) 文件并从记事本文件复制相同的内容,使其可执行并运行它,它起作用了。
我应该怎么做才能使记事本文件在 Ubuntu 上运行?
答案1
Windows 和 Linux 有不同的行尾符号。
您可以安装dos2unix
修复该问题的实用程序:
sudo apt-get install dos2unix
按如下方式运行:
dos2unix -n winfile.txt linuxfile.txt
还有unix2dos
实用功能。
无需安装任何特殊软件,即可完成 Windows 到 Linux 的转换,方法是:
tr -d '\r' < winfile.txt > linuxfile.txt
笔记: 输入和输出文件必须不同。
Ased版本将“就地”编辑文件:
sed -i 's/\r//g' file.txt
或者写入另一个文件:
sed 's/\r//g' winfile.txt > linuxfile.txt
答案2
在 Windows 上,您需要将 Notepad++ 中的行尾 (EOL) 格式更改为 UNIX:
这样它也可以在 Ubuntu 上运行。
答案3
Windows 使用 CR+LF 来换行。在 Linux/Unix 中,您需要 LF。因此,您必须在脚本中将 CR+LF 替换为 LF:
安装dos2unix
sudo apt-get install dos2unix
并通过更正你的脚本
dos2unix <your_script_file>
或通过
dos2unix -n <your_script_file> <out_file>
如果你需要不同的输出文件
更多信息这里
从man dos2unix
NAME
dos2unix - DOS/Mac to Unix and vice versa text file format converter
SYNOPSIS
dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]
答案4
你可以在 Ex 模式下使用 Vim:
ex -bsc '%s/\r//|x' file
%
选择所有行s
代替\r
回车x
保存并关闭