Pagina 1 di 1

file bash Bad interpreter

Inviato: martedì 4 aprile 2017, 21:13
da schwarz89it
Buonasera a tutti,
premetto che non uso mai ubuntu, ma per ragioni universitarie, mi trovo a lavorare su una macchina che installa linux.
Vengo immediatamente al punto della questione, prima di scrivere qui ho cercato in rete il modo in cui scrivere tramite file bash un file di testo.
Nel mio caso in particolare il nome del file deve essere input, senza estensione e al suo interno ci andrà un nome seguito da un numero della forma nome_$i dove i sarà il numero.
Riporto il codice

Codice: Seleziona tutto

#!/bin/bash
for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do 

echo nome_$i > input
procedura che segue
prima che mi si faccia presente che il ciclo potrebbe essere sintetizzato con {0..12} premetto che non sapendo a che versione faccia rifermento il file, ho optato per una scrittura semlice seppur un po' lunga. Inoltre ho letto nei siti che dicono di usare a volte l'apice semplice a volte il doppio apice per racchiudere il testo, ma facendo una prova da terminale, ho visto che anche

Codice: Seleziona tutto

echo nome > input
funziona.
Ora prima di lanciare il bash, che con poca fantasia chiamerò operazione.sh compilo scrivendo da terminale chmod +x orerazione.sh che quello che ho precedentemente fatto con altri file; tuttavia questo, quando scrivo ./operazione.sh non funziona e l'errore che mi appare è:
-bash: ./operazione.sh: /bin/bash^M: bad interpreter: No such file or directory
Se qualcuno potesse illuminarmi sarebbe perfetto.

Re: file bash

Inviato: martedì 4 aprile 2017, 21:39
da giulux
Benvenuto!
Sposto in programmazione.
Metti un titolo meno generico, che faccia capire il problema.
Ciao.

Re: file bash Bad interpreter

Inviato: martedì 4 aprile 2017, 23:39
da UbuNuovo
Devi quotare il testo da stampare (consigliabile) e usare la redirezione in append mode, tipo:

Codice: Seleziona tutto

for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do
	echo "nome_$i" >> input
done

Re: file bash Bad interpreter

Inviato: martedì 4 aprile 2017, 23:55
da schwarz89it
se uso >> invece che > quello che cambia in termini di output è che nel file input troverò alla fine del for un elenco con scritto

Codice: Seleziona tutto

nome_1
nome_2
ecc
in realtà a me interessava che il file venisse sovrascritto a ogni ciclo. Detto questo e provato il bash che mi è stato suggerito, permane l'errore di cui parlavo.

Re: file bash Bad interpreter

Inviato: mercoledì 5 aprile 2017, 0:01
da UbuNuovo
Se deve essere sovrascritto ok.
Avevo letto in furia.
Quel "^M" nel messaggio di errore indica che il file è stato scritto con fine riga dos non unix, credo che sia quello l'errore.
Prova a salvare il file in formato unix.

Re: file bash Bad interpreter

Inviato: mercoledì 5 aprile 2017, 0:03
da schwarz89it
posso chiedere come si fa a salvare in formato unix?

Re: file bash Bad interpreter

Inviato: mercoledì 5 aprile 2017, 0:07
da UbuNuovo
Per esempio con gedit , "File" ->"Salva come" e in basso nella finestra di salvataggio puoi selezionare codifica e fine riga.
Immagine

Re: file bash Bad interpreter

Inviato: mercoledì 5 aprile 2017, 0:17
da schwarz89it
Gentilissimo, era proprio un problema di codifica.
Sfortunatamente io uso Windows e mi collego da remoto tramite putty, ma avevo un file bash generato già in codifica Unix e sono riuscito a risolvere.
Avrei potuto usare il comando nano, ma il problema era a quel punto di tastiera perché non riuscivo a scrivere il carattere #.
Problema risolto! Quella ^M sarebbe rimasta un'incognita per troppo tempo altrimenti.

Re: file bash Bad interpreter

Inviato: mercoledì 5 aprile 2017, 0:22
da UbuNuovo
Altrimenti puoi usare sed per cancellare il carattere indesiderato.

Codice: Seleziona tutto

sed -i 's/\r$//' nome_del_file