Correzione: errore “Cattivo interprete: nessun file o directory di questo tipo” in Linux

Di Redazione FinanzaNews24 8 minuti di lettura
correzione:-errore-“cattivo-interprete:-nessun-file-o-directory-di-questo-tipo”-in-linux

Hannah Stryker / How-To Geek Se ricevi un errore “cattivo interprete: nessun file o directory di questo tipo” durante l’esecuzione di uno script di shell, devi convertire il tuo file di script da Windows a terminazioni di riga Unix. Un metodo è usare il dos2unix comando, in questo modo:

dos2unixscript1.sh

Hai provato a eseguire uno script Bash e hai ricevuto un messaggio di errore “/bin/bash^M: cattivo interprete: nessun file o directory di questo tipo”? L’output non è molto utile e dà quasi l’impressione che manchi il tuo script. Fortunatamente, non è così e la soluzione è molto semplice.

Ottenere un messaggio di errore che legge /bin/bash^M: bad interpreter: No such file or directory significa solo che il tuo file di script di shell ha il file errato terminazioni di riga—i caratteri posti alla fine di una riga che indicano che è ora di passare alla riga successiva. Windows discendente da DOS ama vedere un terminatore “ritorno a capo e avanzamento riga” (CRLF), annotato rn. Al contrario, Linux, macOS moderno e altri sistemi basati su Unix usano solo “line feed” (LF) o n.

Se visualizzi questo errore di cattivo interprete, è probabile che tu o la persona da cui hai ricevuto lo script lo abbia scritto originariamente su un computer Windows. Bash li vede rn terminazioni di riga impostate dal computer Windows e si arrabbia perché impediscono alla shell di interpretare correttamente il tuo script.

Puoi persino confermare il problema in un terminale Linux puntando il file comando al tuo script.

file script1.sh

Se il file utilizza terminazioni di riga DOS, verrà visualizzato il messaggio “con terminatori di riga CRLF” aggiunto nell’output. Se il nostro script avesse utilizzato le nuove righe Unix (LF) appropriate, non menzionerebbe affatto i terminatori. Fortunatamente, tornare nel business LF è facile.

Come correggere un errore “Cattivo interprete: nessun file o directory di questo tipo”. Tutto ciò che serve per sbarazzarsi di quel messaggio di errore e iniziare a eseguire i tuoi script normalmente è passare dalle terminazioni di riga DOS alle terminazioni di riga Unix. Puoi farlo con i comandi del terminale o nel tuo editor di codice preferito. Ecco otto modi per risolverlo:

Utilizzando il comando dos2unix C’è un programma a riga di comando creato apposta per convertire i file DOS (alias Windows) in file completamente Unix compatibili con un nome appropriato dos2unix. È disponibile nella maggior parte dei repository predefiniti, quindi puoi installarlo su Ubuntu con:

sudo apt install dos2unix Sulla nostra Federa installazione dos2unix è stato preinstallato, ma puoi confermare di averlo con:

sudo dnf install dos2unix Su ArcoLinux:

sudo pacman -S dos2unix Usando dos2unix è semplice; dagli solo il nome del tuo file.

dos2unix script1.sh

Controlla con file se vuoi confermare che la conversione è andata a buon fine prima di eseguire lo script. Puoi anche convertire in massa nominando più file separati solo da uno spazio.

dos2unix script1.sh script2.sh script3.sh Oppure, se hai nomi di file coerenti, puoi ovviamente scrivere comandi più brevi usando i caratteri jolly.

dos2unix script*.sh

IL dos2unix Il comando ha diversi flag per aiutarti a fare tipi speciali di conversioni, come modifica della proprietà del file. Puoi anche usarlo in forma inversa, unix2dos, se vuoi tornare a CRLF. accedere dos2unix –help per saperne di più.

Usando il comando tr Se non puoi o non vuoi installare un’utilità dedicata, Linux ha strumenti integrati che ripuliranno quelle nuove righe. Con il tr comando, puoi eliminare il file r parte delle terminazioni di linea quindi ci rimane n terminatori.

tr -d ‘r’ < script1.sh > script1_unix.sh Qui, tr sta prendendo il testo del script1.sh file, eliminando ogni istanza di r trova e salva l’output come file script1_unix.sh.

Usando il comando sed I potenti sed comando incorporato nella tua shell può anche cambiare le terminazioni di riga per il tuo file.

sed -i ‘s/r//’ script1.sh Se non hai familiarità con sed sintassi, stiamo dicendo sed per modificare il nostro file (-i) e sostituire (s/) ogni ritorno a capo (r) con niente. Questo ci lascia con il preferito di Unix n terminatori di riga.

Usando vi o vim Se usi vi o vim per modificare i tuoi script, basta passare questo comando per convertire il file attualmente aperto in terminazioni di riga Unix.

:set fileformat=unix

IMPARENTATO: Come uscire dall’editor Vi o Vim

Utilizzando Geany Se lavori in un ambiente desktop, non c’è motivo di scherzare nel terminale solo per rendere i tuoi file pronti per il mondo Unix. Praticamente ogni editor di codice e IDE là fuori ha un interruttore per le terminazioni di riga. Quello include Genny.

Per convertire le terminazioni di riga in Geany, vai su Documento> Imposta terminazioni di riga> Converti e imposta su LF (Unix).

Salva lo script e prova a eseguirlo di nuovo.

Usando Kate o Kwrite Se usi Kwrite per modificare il tuo script o il cugino più potente di Kwrite Katepuoi convertire in formato LF facendo clic su Strumenti > Fine riga > Unix.

Salva il file ed esegui di nuovo lo script.

Utilizzo di Blocco note++ Se modifichi il codice in Notepad ++ puoi anche convertire facilmente i finali di riga, il che è utile perché probabilmente lo stai eseguendo su Windows (a meno che tu non abbia installato Notepad++ per Linux) e puoi convertirli prima di passare al tuo sistema Linux. Con il file aperto, vai a Modifica > Conversione EOL > Unix (LF).

Assicurati di salvare lo script prima di eseguirlo.

Se desideri che Notepad ++ crei file con terminazioni di riga Unix per impostazione predefinita, vai su Impostazioni> Preferenze, seleziona la scheda “Nuovo documento” e sotto le opzioni “Formato (fine riga)” fai clic sul pulsante di opzione “Unix (LF)”.

Utilizzo del codice VS Visual Studio Code (VS Code) funziona più o meno allo stesso modo, solo che l’interruttore è ancora più facile da trovare. Basta fare clic su “CRLF” nell’angolo in basso a destra della finestra di VS Code.

Puoi anche impostare VS Code per utilizzare le terminazioni di riga Unix per impostazione predefinita andando su File> Preferenze> Impostazioni e digitando eol nella barra di ricerca delle impostazioni. Il primo risultato dovrebbe essere un menu a discesa per l’impostazione di “Eol”. Cambialo in “n”.

IMPARENTATO: Come rendere i tuoi script Bash consapevoli dell’hardware

Condividi questo articolo
Exit mobile version