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


14

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

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

如何使Notepad文件在Ubuntu上运行?


Answers:


20

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

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

sudo apt-get install dos2unix

这样运行:

dos2unix -n winfile.txt linuxfile.txt

也有unix2dos实用程序。

Windows到Linux的转换也可以通过以下方式完成,而无需安装任何特殊软件:

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

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

一个sed的版本将编辑“到位”的文件:

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

或写入另一个文件:

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

您的命令是错误的。dos2unix winfile.txt linuxfile.txt尝试转换两个文件。使用此命令dos2unix -n winfile.txt linuxfile.txt
AB

@AB固定。你是对的。他们更改了输入参数。我很久没有使用它了。
试点

无论如何,好的答案+1
AB

非常感谢大家。由于我没有Notepad ++,并且我不想安装新的软件包(dos2unix),因此我更喜欢“ tr”命令。我尝试了,它奏效了。但是请注意,源文件和目标文件必须不同。
艾伯特

@Albert已添加到答案。可以通过另一种方法来保留文件名,但是恕我直言,这是不值得的。而且最好还是使用不同的名称,以免混淆文件。
飞行员

6

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

在此处输入图片说明

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


1
这样,它只能在Ubuntu / Linux上运行。虽然特殊的高级编辑器(如Notepad ++)可能会识别行尾类型并始终正确显示,但普通的Windows记事本等不会。
字节指挥官

@ByteCommander是的,但是他想让它在Ubuntu上运行。

1
当然是。我知道,因此赞成。我只是想弄清楚这一事实,以使当普通记事本中的文件现在看起来很奇怪时,没有人会感到惊讶。
字节指挥官

2
我认为OP是指Windows中的内置程序Notepad,而不是第三方程序Notepad ++。如果您建议为此目的在Windows上安装Nodepad ++,是否可以在回答中使其更加明确?就目前情况而言,我认为这令人困惑。
彼得·莫滕森

@PeterMortensen我再次阅读了他的问题,我不认为我被误解了,我的回答是解决他问题的好方法之一。

2

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

1

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

:set ff=unix<enter> followed by 
:wq<enter> 

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


0

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

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

  2. s 替代

  3. \r 回车

  4. x 保存并关闭

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.