Executando um script criado no Bloco de Notas (Windows) no Ubuntu

14

Criei um arquivo do bloco de notas no Windows e copiei-o no Ubuntu. O arquivo contém algumas regras do iptables. Depois de tornar o arquivo executável usando chmod +xe executando, ele não funcionou.

No entanto, quando eu criei um Ubuntu ( gedit arquivo ) e copiei o mesmo conteúdo do arquivo Notepad, o tornei executável e o executei, ele funcionou.

O que devo fazer para que o arquivo do Notepad seja executado no Ubuntu?

Albert
fonte

Respostas:

20

Windows e Linux possuem diferentes símbolos de final de linha.

Você pode instalar o dos2unixutilitário que o corrige:

sudo apt-get install dos2unix

Execute da seguinte maneira:

dos2unix -n winfile.txt linuxfile.txt

Há também o unix2dosutilitário.

A conversão de Windows para Linux também pode ser feita sem a instalação de nenhum software especial.

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

Nota: Os arquivos de entrada e saída devem ser diferentes.

Uma versão sed irá editar o arquivo "in place":

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

Ou escreva para outro arquivo:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Pilot6
fonte
Seu comando está errado. dos2unix winfile.txt linuxfile.txttenta converter os dois arquivos. Use este comandodos2unix -n winfile.txt linuxfile.txt
AB
@AB Fixed. Você está certo. Eles mudaram os parâmetros de entrada. Eu não o uso há muito tempo.
Pilot6
Enfim, boa resposta +1
AB
Muito obrigado a todos. Como não tenho o Notepad ++ e não queria instalar um novo pacote (dos2unix), preferi o comando "tr". Eu tentei e funcionou. Mas observe que os arquivos de origem e destino devem ser diferentes.
Albert
@ Albert Adicionado à resposta. Pode ser feito de outra maneira para manter o nome do arquivo, mas não vale a pena o esforço IMHO. E é melhor ter nomes diferentes de qualquer maneira para não misturar arquivos.
Pilot6
6

No Windows, você precisa alterar o formato EOL (End of Line) no Notepad ++ para UNIX:

insira a descrição da imagem aqui

Dessa forma, também funcionará no Ubuntu.


fonte
1
Dessa forma, ele funcionará apenas no Ubuntu / Linux. Embora editores avançados especiais como o Notepad ++ possam reconhecer o tipo de final de linha e exibi-lo corretamente de qualquer maneira, o bloco de notas normal do Windows etc.
Byte Commander
@ByteCommander SIM, mas ele quer executá-lo no Ubuntu.
1
Sim, claro. Eu sei e votado por isso. Eu só queria deixar esse fato claro, para que ninguém se surpreenda quando o arquivo parecer estranho no bloco de notas normal.
Byte Commander
2
Acho que o OP está se referindo ao programa interno Notepad no Windows, não ao programa de terceiros Notepad ++ . Se você sugere que o Nodepad ++ seja instalado no Windows para esse fim, você pode torná-lo mais explícito na sua resposta? Como está agora, acho que é confuso.
Peter Mortensen
@ PeterMortensen Eu li novamente sua pergunta, não acho que entendi mal e minha resposta é uma das boas soluções para o seu problema.
2

O Windows usa CR + LF para quebras de linha. No Linux / Unix, você precisa de LF. Portanto, você deve substituir CR + LF por LF no seu script:

Instalar dos2unix

sudo apt-get install dos2unix

E corrija seu script via

dos2unix <your_script_file>

ou via

dos2unix -n <your_script_file> <out_file>

se você precisar de um arquivo de saída diferente

Mais informações aqui


a partir de 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
fonte
1

Eu uso o cygwin no Windows.
Abra o arquivo com vi. Então entre

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

irá salvar o arquivo com caracteres de fim de linha do Unix.

Russell McDonell
fonte
0

Você pode usar o Vim no modo Ex:

ex -bsc '%s/\r//|x' file
  1. % selecione todas as linhas

  2. s substituto

  3. \r retorno de carro

  4. x salvar e fechar

Steven Penny
fonte