Uruchamianie skryptu utworzonego w Notatniku (Windows) na Ubuntu

14

Utworzyłem plik Notatnika w systemie Windows i skopiowałem go do Ubuntu. Plik zawiera kilka reguł iptables. Po uruchomieniu pliku przy użyciu chmod +xi uruchomieniu go nie działał.

Jednak gdy utworzyłem plik Ubuntu ( gedit ) i skopiowałem tę samą zawartość z pliku Notatnika, uczyniłem go wykonywalnym i uruchomiłem, działało.

Co powinienem zrobić, aby plik Notepad działał na Ubuntu?

Albert
źródło

Odpowiedzi:

20

Windows i Linux mają różne symbole końca linii.

Możesz zainstalować dos2unixnarzędzie, które to naprawia:

sudo apt-get install dos2unix

Uruchom to w ten sposób:

dos2unix -n winfile.txt linuxfile.txt

Istnieje również unix2dosnarzędzie.

Konwersję systemu Windows na Linux można również wykonać bez instalowania specjalnego oprogramowania przez

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

Uwaga: Pliki wejściowe i wyjściowe muszą być inne.

Wersja sed będzie edytować plik „w miejscu”:

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

Lub napisz do innego pliku:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Pilot 6
źródło
Twoje polecenie jest złe. dos2unix winfile.txt linuxfile.txtpróbuje przekonwertować oba pliki. Użyj tego poleceniados2unix -n winfile.txt linuxfile.txt
AB
@AB Naprawiono. Masz rację. Zmienili parametry wejściowe. Długo z niego nie korzystałem.
Pilot6
W każdym razie dobra odpowiedź +1
AB
Bardzo wam wszystkim dziękuję. Ponieważ nie mam Notepad ++ i nie chciałem instalować nowego pakietu (dos2unix), wolałem polecenie „tr”. Próbowałem i zadziałało. Pamiętaj jednak, że pliki źródłowy i docelowy muszą być inne.
Albert,
@Albert Dodano do odpowiedzi. Można to zrobić w inny sposób, aby zachować nazwę pliku, ale nie jest to warte wysiłku IMHO. I tak lepiej mieć różne nazwy, aby nie pomieszać plików.
Pilot6
6

W systemie Windows musisz zmienić format końca linii (EOL) w Notepad ++ na UNIX:

wprowadź opis zdjęcia tutaj

W ten sposób będzie działać również na Ubuntu.


źródło
1
W ten sposób będzie działać tylko na Ubuntu / Linux. Podczas gdy specjalne zaawansowane edytory, takie jak Notepad ++, mogą rozpoznać typ zakończenia linii i wyświetlić go mimo to poprawnie, zwykły notatnik Windows itp. Nie.
Bajt Dowódca
@ByteCommander TAK, ale chce uruchomić go na Ubuntu.
1
Tak oczywiście. Wiem i dlatego głosowałem. Chciałem tylko wyjaśnić ten fakt, aby nikt nie był zaskoczony, gdy plik wygląda teraz dziwnie w normalnym notatniku.
Bajt Dowódca
2
Myślę, że OP odnosi się do wbudowanego programu Notepad w systemie Windows, a nie do programu zewnętrznego Notepad ++ . Jeśli sugerujesz, że w tym celu Nodepad ++ powinien być zainstalowany w systemie Windows, czy możesz uściślić to w swojej odpowiedzi? W tej chwili myślę, że jest to mylące.
Peter Mortensen,
@PeterMortensen ponownie przeczytałem jego pytanie, nie sądzę, że źle zrozumiałem, a moja odpowiedź jest jednym z dobrych rozwiązań jego problemu.
2

Windows używa CR + LF do podziału linii. W Linux / Unix potrzebujesz LF. Dlatego w swoim skrypcie musisz zamienić CR + LF na LF:

zainstalować dos2unix

sudo apt-get install dos2unix

I popraw swój skrypt za pomocą

dos2unix <your_script_file>

lub przez

dos2unix -n <your_script_file> <out_file>

jeśli potrzebujesz innego pliku wyjściowego

Więcej informacji tutaj


od 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
źródło
1

Używam cygwin w systemie Windows.
Otwórz plik za pomocą vi. Następnie wejdź

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

zapisze plik z uniksowymi znakami końca linii.

Russell McDonell
źródło
0

Możesz używać Vima w trybie Ex:

ex -bsc '%s/\r//|x' file
  1. % wybierz wszystkie linie

  2. s zastąpić

  3. \r powrót karetki

  4. x Zapisz i zamknij

Steven Penny
źródło