Запуск сценария, созданного в Блокноте (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
Pilot6
источник
Ваша команда неверна. dos2unix winfile.txt linuxfile.txtпытается конвертировать оба файла. Используйте эту командуdos2unix -n winfile.txt linuxfile.txt
AB
@AB Исправлено. Вы правы. Они изменили входные параметры. Я не использовал это в течение длительного времени.
Pilot6
В любом случае, хороший ответ +1
AB
Спасибо всем большое. Поскольку у меня нет Notepad ++ и я не хотел устанавливать новый пакет (dos2unix), я предпочел команду «tr». Я попробовал это, и это сработало. Но учтите, что исходный и целевой файлы должны отличаться.
Альберт
@ Альберт Добавлено в ответ. Это можно сделать другим способом, чтобы сохранить имя файла, но это не стоит усилий IMHO. И в любом случае лучше иметь разные имена, чтобы не перепутать файлы.
Pilot6
6

В Windows вам нужно изменить формат конца строки (EOL) в Notepad ++ на UNIX:

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

Таким образом, он будет работать и на Ubuntu.


источник
1
Таким образом, он будет работать только на Ubuntu / Linux. В то время как специальные расширенные редакторы, такие как Notepad ++, могут распознавать тип конца строки и корректно отображать его, нормальный блокнот Windows и т. Д. Не будут.
Byte Commander
@ByteCommander ДА, но он хочет, чтобы он работал на Ubuntu.
1
Да, конечно. Я знаю и проголосовал поэтому. Я просто хотел прояснить этот факт, чтобы никто не удивился, когда файл теперь выглядит странно в обычном блокноте.
Byte Commander
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 ...]
AB
источник
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 сохранить и закрыть

Стивен Пенни
источник