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?


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

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.


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 ...]

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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.