Esecuzione di uno script creato in Blocco note (Windows) su Ubuntu


14

Ho creato un file di Blocco note su Windows e l'ho copiato su Ubuntu. Il file contiene alcune regole di iptables. Dopo aver reso ed eseguibile il file chmod +xeseguendolo, non ha funzionato.

Tuttavia, quando ho creato un file Ubuntu ( gedit ) e copiato gli stessi contenuti dal file Notepad, l'ho reso eseguibile ed eseguito, ha funzionato.

Cosa devo fare per eseguire il file Notepad su Ubuntu?


Risposte:


20

Windows e Linux hanno simboli di fine riga diversi.

È possibile installare l' dos2unixutilità che lo corregge:

sudo apt-get install dos2unix

Eseguilo in questo modo:

dos2unix -n winfile.txt linuxfile.txt

C'è anche l' unix2dosutilità.

La conversione da Windows a Linux può anche essere eseguita senza installare alcun software speciale da

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

Nota: i file di input e output devono essere diversi.

Una versione sed modificherà il file "sul posto":

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

Oppure scrivi in ​​un altro file:

 sed 's/\r//g' winfile.txt > linuxfile.txt

Il tuo comando è sbagliato. dos2unix winfile.txt linuxfile.txtprova a convertire entrambi i file. Usa questo comandodos2unix -n winfile.txt linuxfile.txt
AB

@AB Risolto. Hai ragione. Hanno cambiato i parametri di input. Non l'ho usato per molto tempo.
Pilota

Comunque, buona risposta +1
AB

Grazie mille a tutti. Dato che non ho Notepad ++ e non volevo installare un nuovo pacchetto (dos2unix), ho preferito il comando "tr". L'ho provato e ha funzionato. Ma tieni presente che i file di origine e di destinazione devono essere diversi.
Albert,

@Albert Aggiunto alla risposta. Può essere fatto un altro modo per mantenere il nome del file, ma non vale la pena IMHO. Ed è meglio avere nomi diversi comunque per non confondere i file.
Pilota

6

Su Windows, è necessario modificare il formato di fine linea (EOL) in Notepad ++ in UNIX:

inserisci qui la descrizione dell'immagine

In questo modo funzionerà anche su Ubuntu.


1
In questo modo funzionerà solo su Ubuntu / Linux. Mentre speciali editor avanzati come Notepad ++ potrebbero riconoscere il tipo di fine riga e visualizzarlo correttamente comunque, il normale blocco note di Windows ecc.
Byte Commander

@ByteCommander SÌ, ma vuole farlo funzionare su Ubuntu.

1
Sì, naturalmente. Conosco e votato pertanto. Volevo solo chiarire questo fatto, in modo che nessuno fosse sorpreso quando il file ora sembra strano nel normale blocco note.
Byte Commander

2
Penso che l'OP si riferisca al programma integrato Notepad in Windows, non al programma di terze parti Notepad ++ . Se suggerisci che Nodepad ++ dovrebbe essere installato su Windows per questo scopo, puoi renderlo più esplicito nella tua risposta? Allo stato attuale, penso che sia confuso.
Peter Mortensen,

@PeterMortensen Ho letto di nuovo la sua domanda, non credo di aver frainteso e la mia risposta è una delle buone soluzioni al suo problema.

2

Windows utilizza CR + LF per le interruzioni di riga. In Linux / Unix hai bisogno di LF. Pertanto devi sostituire CR + LF in LF nel tuo script:

Installare dos2unix

sudo apt-get install dos2unix

E correggi il tuo script tramite

dos2unix <your_script_file>

o via

dos2unix -n <your_script_file> <out_file>

se hai bisogno di un file di output diverso

Maggiori informazioni qui


a partire dal 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

Uso cygwin su Windows.
Apri il file con vi. Quindi entra

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

salverà il file con i caratteri di fine riga Unix.


0

Puoi usare Vim in modalità Ex:

ex -bsc '%s/\r//|x' file
  1. % seleziona tutte le righe

  2. s sostituto

  3. \r ritorno a capo

  4. x salva e chiudi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.