在Ubuntu上运行在记事本(Windows)中创建的脚本

我在Windows上创建了一个记事本文件并将其复制到Ubuntu。 该文件包含一些iptables规则。 使用chmod +x使文件可执行并执行后,它不起作用。

但是,当我创建一个Ubuntu( gedit )文件并从记事本文件中复制相同的内容,使其可执行并运行它,它工作。

我该怎么做才能使记事本文件在Ubuntu上运行?

Windows和Linux具有不同的行尾符号。

您可以安装修复它的dos2unix实用程序:

 sudo apt-get install dos2unix 

以这种方式运行:

 dos2unix -n winfile.txt linuxfile.txt 

还有unix2dos实用程序。

Windows-to-Linux转换也可以在不安装任何特殊软件的情况下完成

  tr -d '\r' < winfile.txt > linuxfile.txt 

注意: 输入和输出文件必须不同。

sed版本将“就地”编辑文件:

  sed -i 's/\r//g' file.txt 

或写入另一个文件:

  sed 's/\r//g' winfile.txt > linuxfile.txt 

在Windows上,您需要将Notepad ++中的行尾(EOL)格式更改为UNIX:

在此处输入图像描述

这样它也可以在Ubuntu上运行。

Windows使用CR + LF进行换行。 在Linux / Unix中你需要LF。 因此,您必须在脚本中将CR + LF替换为LF:

安装dos2unix

 sudo apt-get install dos2unix 

并通过更正您的脚本

 dos2unix  

或通过

 dos2unix -n   

如果你需要一个不同的输出文件

这里有更多信息


来自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 ...] 

我在Windows上使用cygwin。
用vi打开文件。 然后输入

 :set ff=unix followed by :wq 

将使用Unix行尾字符保存文件。

您可以在Ex模式下使用Vim:

 ex -bsc '%s/\r//|x' file 
  1. %选择所有行

  2. 替代品

  3. \r回车

  4. x保存并关闭