Запуск сценарію, створеного в Блокноті (Windows) в Ubuntu


14

Я створив файл «Блокнот» у Windows і скопіював його в Ubuntu. Файл містить деякі правила iptables. Зробивши файл виконуваним за допомогою chmod +xта виконавши його, він не працював.

Однак, коли я створив файл Ubuntu ( gedit ) і скопіював той самий вміст з файлу Notepad, зробив його виконуваним і запустив його, він працював.

Що мені робити, щоб змусити файл Notepad працювати на Ubuntu?


Відповіді:


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 Виправлено. Ти правий. Вони змінили вхідні параметри. Я не користувався ним довго.
Пілот6

У будь-якому випадку, хороша відповідь +1
AB

Дуже дякую всім Оскільки у мене немає Notepad ++, і я не хотів встановлювати новий пакет (dos2unix), я віддав перевагу команді "tr". Я спробував це, і це спрацювало. Але зауважте, що вихідні та цільові файли повинні бути різними.
Альберт

@Albert Додано до відповіді. Можна зробити ще один спосіб зберегти ім'я файлу, але IMHO не докладає зусиль. І краще все-таки мати різні назви, щоб не змішувати файли.
Пілот6

6

У Windows потрібно змінити формат кінця рядка (EOL) у Блокноті ++ на UNIX:

введіть тут опис зображення

Так він працюватиме і на Ubuntu.


1
Таким чином він буде працювати тільки на Ubuntu / Linux. У той час як спеціальні розширені редактори, такі як Notepad ++, можуть розпізнати тип закінчення рядка та відобразити його правильно у будь-якому випадку, звичайний блокнот Windows тощо не буде.
Байт-командир

@ByteCommander ТАК, але він хоче запустити його на Ubuntu.

1
Так, звісно. Тому я знаю і підтримую. Я просто хотів уточнити цей факт, щоб ніхто не здивувався, коли файл зараз виглядає дивно в звичайному блокноті.
Командир байтів

2
Я думаю, що ОП посилається на вбудовану програму Notepad в Windows, а не на сторонні програми Notepad ++ . Якщо ви пропонуєте встановити Nodepad ++ у Windows для цієї мети, чи можете ви зробити це більш чітким у своїй відповіді? Як зараз це є, я вважаю, що це заплутано.
Пітер Мортенсен

@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

Я використовую cygwin у Windows.
Відкрийте файл за допомогою vi. Потім введіть

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

збереже файл з символами Unix кінця рядка.


0

Ви можете використовувати Vim в режимі Ex:

ex -bsc '%s/\r//|x' file
  1. % виберіть усі рядки

  2. s замінник

  3. \r повернення вагона

  4. x зберегти і закрити

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.