Ejecutar un script creado en el Bloc de notas (Windows) en Ubuntu

14

Creé un archivo de Bloc de notas en Windows y lo copié en Ubuntu. El archivo contiene algunas reglas de iptables. Después de hacer el archivo ejecutable usando chmod +xy ejecutándolo, no funcionó.

Sin embargo, cuando creé un archivo Ubuntu ( gedit ) y copié el mismo contenido del archivo del Bloc de notas, lo hice ejecutable y lo ejecuté, funcionó.

¿Qué debo hacer para que el archivo del Bloc de notas se ejecute en Ubuntu?

Albert
fuente

Respuestas:

20

Windows y Linux tienen diferentes símbolos de fin de línea.

Puede instalar la dos2unixutilidad que lo arregla:

sudo apt-get install dos2unix

Ejecútelo de esta manera:

dos2unix -n winfile.txt linuxfile.txt

También existe la unix2dosutilidad.

La conversión de Windows a Linux también se puede hacer sin instalar ningún software especial

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

Nota: Los archivos de entrada y salida deben ser diferentes.

Una versión sed editará el archivo "en su lugar":

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

O escriba en otro archivo:

 sed 's/\r//g' winfile.txt > linuxfile.txt
Piloto6
fuente
Tu orden está equivocada. dos2unix winfile.txt linuxfile.txtintenta convertir ambos archivos. Utilice este comandodos2unix -n winfile.txt linuxfile.txt
AB
@AB fijo. Tienes razón. Cambiaron los parámetros de entrada. No lo usé por mucho tiempo.
Pilot6
De todos modos, buena respuesta +1
AB
Muchas gracias a todos. Como no tengo Notepad ++ y no quería instalar un nuevo paquete (dos2unix), preferí el comando "tr". Lo intenté y funcionó. Pero tenga en cuenta que los archivos de origen y de destino deben ser diferentes.
Albert
@Albert Añadido a la respuesta. Se puede hacer otra forma de mantener el nombre del archivo, pero no vale la pena el esfuerzo en mi humilde opinión. Y de todos modos es mejor tener nombres diferentes para no mezclar archivos.
Pilot6
6

En Windows, debe cambiar el formato de fin de línea (EOL) en Notepad ++ a UNIX:

ingrese la descripción de la imagen aquí

De esa manera, también funcionará en Ubuntu.


fuente
1
De esa manera solo funcionará en Ubuntu / Linux. Si bien los editores avanzados especiales como Notepad ++ pueden reconocer el tipo de final de línea y mostrarlo correctamente de todos modos, el bloc de notas normal de Windows, etc., no lo hará.
Byte Commander
@ByteCommander SÍ, pero quiere que se ejecute en Ubuntu.
1
Sí, por supuesto. Sé y voté por lo tanto. Solo quería aclarar este hecho, para que nadie se sorprenda cuando el archivo ahora se vea extraño en el bloc de notas normal.
Byte Commander
2
Creo que el OP se refiere al programa incorporado Notepad en Windows, no al programa de terceros Notepad ++ . Si sugiere que Nodepad ++ debería instalarse en Windows para este propósito, ¿puede hacerlo más explícito en su respuesta? Tal como está ahora, creo que es confuso.
Peter Mortensen
@PeterMortensen Leí nuevamente su pregunta, no creo haber entendido mal y mi respuesta es una de las buenas soluciones a su problema.
2

Windows usa CR + LF para saltos de línea. En Linux / Unix necesitas LF. Por lo tanto, debe reemplazar CR + LF en LF en su script:

Instalar en pc dos2unix

sudo apt-get install dos2unix

Y corrige tu guión a través de

dos2unix <your_script_file>

o vía

dos2unix -n <your_script_file> <out_file>

si necesita un archivo de salida diferente

Más información aquí.


desde 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
fuente
1

Yo uso cygwin en Windows.
Abra el archivo con vi. Luego ingrese

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

guardará el archivo con caracteres de final de línea de Unix.

Russell McDonell
fuente
0

Puede usar Vim en modo Ex:

ex -bsc '%s/\r//|x' file
  1. % seleccione todas las líneas

  2. s sustituir

  3. \r retorno de carro

  4. x guardar y cerrar

Steven Penny
fuente