2011-03-08 18 views
9

ottengo l'errore sotto durante il tentativo di eseguire uno script di shell, r personaggio in script di shell

$'\r': command not found: line 2: 

Si prega di suggerire una soluzione per lo stesso.

Qui di seguito sono le linee intial utilizzate nello script,

#!/bin/sh 

if [[ $# -lt 1 ]]; then 
    echo "ERROR Environment argument missing <dev,test,qa,prod>" 
    export RC=50 
    exit $RC 
fi 
+1

Quali sono le prime due o tre righe dello script della shell?:) – sarnold

+0

Si prega di inviare l'intero script o abbastanza per consentire alle persone di riprodurre il problema – Tony

+0

\ r \ n è un fine riga di Windows .. l'hai scritto in Windows? in tal caso, basta riscriverlo: P – Sigtran

risposta

1

ho ricevuto un messaggio di errore diverso quando si esegue lo script sotto /bin/sh, ma quando sono passato a /bin/bash, ha funzionato bene:

$ cat foo.sh 
#!/bin/sh 
if [[ $# -lt 1 ]]; 
    then echo "ERROR Environment argument missing" 
    RC=50 
    exit $RC 
fi 
$ sh foo.sh 
foo.sh: 6: [[: not found 
$ bash foo.sh 
ERROR Environment argument missing 

Hai costruito in un bashism. Questo può o non può essere un grosso problema per la tua organizzazione. Se si desidera continuare a utilizzare le funzionalità specifiche di bash, modificare la riga di shebang su #!/bin/bash e vedere se ciò è utile.

+0

Grazie sarnold per la risposta. Ho provato lo stesso script dopo aver cambiato in bash e con il debug attivato. Ho ancora ricevuto l'errore, Di seguito è riportato l'output, $ bash -xv foo.sh #!/Bin/bash + $ '\ r' : comando not foundner.sh: riga 2: se [[$ # -lt 1]]; poi echo "ERRORE argomento Ambiente mancante " export RC = 50 exit $ RC fi ConstruedTermsXMLGenerator.sh: linea 7: errore di sintassi nei pressi di token imprevisto 'fi' ConstruedTermsXMLGenerator.sh: riga 7: 'fi ' – Mohan

+0

@Mohan, quindi forse @Sigtran è corretto; questo file è stato creato su Windows? In tal caso, esegui 'dos2unix' o' dtox' o uno di questi tipi simili di strumenti per rimuovere tutti i caratteri '\ r' extra dal file. – sarnold

+0

Ma lo stesso script funziona bene quando viene inserito nella directory/tmp ed eseguito. Com'è possibile? – Mohan

13

Il tuo problema è che il file ha terminazioni di linea di Windows. Ciò può essere causato dalla modifica di un file in Windows e dal tentativo di eseguirlo su un sistema non Windows.

È possibile risolvere questo problema utilizzando dos2unix per convertire i fine riga:

dos2unix ConstruedTermsXMLGenerator.sh 

L'utilità corrispondente da convertire nella direzione opposta è unix2dos.

Alcuni sistemi dispongono di fromdos e todos.

+0

@Mohan, se ftp il tuo script da windows a * nix, assicurati di trasferirlo come ascii. Se lo scp, devi usare 'dos2unix' sul lato remoto. Oppure usa un editor di testo che può salvare in formato "unix". –

+0

Notepad ++ su Windows usando la codifica Ansi fa questo per sh file. Usa "Salva come file bash unix" invece "Salva". –

0

Avevo questo problema esatto quando creavo un file .sh su un Mac (unix) ed eseguivo in Linux. Risulta che ho dovuto impostare le impostazioni di FileZilla FTP a 'binario' Tipo di trasferimento:

  • "Impostazioni> Applicazioni> Tipi di file> predefinito di trasferimento tipo" a "Binary" (invece di " Auto ")
0

ho avuto lo stesso errore e quello che ho fatto è stato quello di trasformare i personaggi '\r'-'\n'. con questa linea:

tr '\r' '\n' <oldfile.sh> newfile.sh 
mv newfile.sh oldfile.sh 
chmod +x oldfile.sh 
./oldfile.sh 

Penso che si potrebbe anche eliminare il '\ r' i caratteri utilizzando:

tr -d '\r' <oldfile.sh> newfile.sh 

tr è il comando trasnform, e il -d è eliminare la seguente carattere.

Penso che alla shell in realtà non piaccia il carattere '\r'.

0

È possibile utilizzare sed -i 's/\r$//' scriptname.sh

Sostituire lo scriptname con nome dello script vero e proprio.