Ausführen eines in Notepad (Windows) erstellten Skripts unter Ubuntu

14

Ich habe eine Notepad-Datei unter Windows erstellt und auf Ubuntu kopiert. Die Datei enthält einige Iptables-Regeln. Nachdem die Datei ausführbar gemacht chmod +xund ausgeführt wurde, funktionierte sie nicht mehr.

Als ich jedoch eine Ubuntu ( gedit ) -Datei erstellte und denselben Inhalt aus der Notepad-Datei kopierte, sie ausführbar machte und ausführte, funktionierte sie.

Was soll ich tun, damit die Notepad-Datei unter Ubuntu ausgeführt wird?

Albert
quelle

Antworten:

20

Windows und Linux haben unterschiedliche Symbole für das Zeilenende.

Sie können das dos2unixDienstprogramm installieren, das das Problem behebt:

sudo apt-get install dos2unix

Führen Sie es so aus:

dos2unix -n winfile.txt linuxfile.txt

Es gibt auch das unix2dosDienstprogramm.

Die Windows-zu-Linux-Konvertierung kann auch ohne Installation einer speziellen Software durchgeführt werden

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

Hinweis: Eingabe- und Ausgabedateien müssen unterschiedlich sein.

Eine sed- Version bearbeitet die Datei "an Ort und Stelle":

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

Oder schreiben Sie in eine andere Datei:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Pilot6
quelle
Ihr Befehl ist falsch. dos2unix winfile.txt linuxfile.txtversucht beide Dateien zu konvertieren. Verwenden Sie diesen Befehldos2unix -n winfile.txt linuxfile.txt
AB
@AB behoben. Du hast recht. Sie haben die Eingabeparameter geändert. Ich habe es lange nicht mehr benutzt.
Pilot6
Wie auch immer, gute Antwort +1
AB
Danke euch allen. Da ich Notepad ++ nicht besitze und kein neues Paket (dos2unix) installieren möchte, bevorzuge ich den Befehl "tr". Ich habe es versucht und es hat funktioniert. Beachten Sie jedoch, dass die Quell- und Zieldateien unterschiedlich sein müssen.
Albert
@ Albert Zur Antwort hinzugefügt. Es kann auch anders gemacht werden, um den Dateinamen beizubehalten, aber es lohnt sich meiner Meinung nach nicht. Und es ist besser, verschiedene Namen zu haben, um Dateien nicht zu verwechseln.
Pilot6
6

Unter Windows müssen Sie das EOL-Format (End of Line) in Notepad ++ in UNIX ändern:

Bildbeschreibung hier eingeben

Auf diese Weise wird es auch auf Ubuntu funktionieren.


quelle
1
Auf diese Weise funktioniert es nur unter Ubuntu / Linux. Während spezielle fortgeschrittene Editoren wie Notepad ++ den Zeilenende-Typ möglicherweise erkennen und ihn trotzdem korrekt anzeigen, werden normale Windows-Editoren usw. dies nicht tun.
Byte Commander
@ByteCommander JA, aber er möchte, dass es auf Ubuntu läuft.
1
Ja natürlich. Ich kenne und habe deshalb abgestimmt. Ich wollte diese Tatsache nur klarstellen, damit sich niemand wundert, wenn die Datei jetzt im normalen Notizblock seltsam aussieht.
Byte Commander
2
Ich denke, das OP bezieht sich auf das in Windows integrierte Programm Notepad , nicht auf das Drittanbieterprogramm Notepad ++ . Wenn Sie vorschlagen, Nodepad ++ zu diesem Zweck unter Windows zu installieren, können Sie dies in Ihrer Antwort präziser formulieren? So wie es jetzt ist, finde ich es verwirrend.
Peter Mortensen
@PeterMortensen Ich las noch einmal seine Frage, ich glaube nicht, dass ich falsch verstanden habe und meine Antwort ist eine der guten Lösungen für sein Problem.
2

Windows verwendet CR + LF für Zeilenumbrüche. In Linux / Unix benötigen Sie LF. Daher müssen Sie in Ihrem Skript CR + LF in LF ersetzen:

Installieren dos2unix

sudo apt-get install dos2unix

Und korrigieren Sie Ihr Skript über

dos2unix <your_script_file>

oder über

dos2unix -n <your_script_file> <out_file>

wenn Sie eine andere Ausgabedatei benötigen

Weitere Informationen hier


von 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 ...]
AB
quelle
1

Ich benutze Cygwin unter Windows.
Öffne die Datei mit vi. Dann treten Sie ein

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

speichert die Datei mit Unix-Zeilenendezeichen.

Russell McDonell
quelle
0

Sie können Vim im Ex-Modus verwenden:

ex -bsc '%s/\r//|x' file
  1. % Wählen Sie alle Zeilen aus

  2. s Ersatz

  3. \r Wagenrücklauf

  4. x speichern und schließen

Steven Penny
quelle