2011-03-08 21 views
9

me sale el error abajo al intentar ejecutar un script de shell,carácter r en shell script

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

Para sugerir una solución para el mismo.

A continuación se presentan las líneas intial utilizados en el guión,

#!/bin/sh 

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

¿Cuáles son las dos o tres primeras líneas de su script de shell?:) – sarnold

+0

Por favor, publique todo el script o suficiente para permitir que las personas reproduzcan el problema – Tony

+0

\ r \ n es un final de línea de Windows ... ¿lo escribió en Windows? de ser así, simplemente vuelva a escribirlo: P – Sigtran

Respuesta

1

Tengo un mensaje de error diferente cuando se ejecuta la secuencia de comandos bajo /bin/sh, pero cuando me pasa a /bin/bash, funcionó bien:

$ 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 

Has construido un bashism. Esto puede o no ser un gran problema para su organización. Si desea seguir usando las características específicas de bash, cambie la línea shebang al #!/bin/bash y vea si eso ayuda.

+0

Gracias sarnold por la respuesta. Probé la misma secuencia de comandos después de cambiar a bash y con la depuración activada. Todavía obtengo el error, a continuación se muestra el resultado, $ bash -xv foo.sh #!/Bin/bash + $ '\ r' : comando no foundnerator.sh: línea 2: si [[$ # -lt 1]]; entonces echo "ERROR argumento de Medio Ambiente faltante " exportación RC = 50 salida $ RC fi ConstruedTermsXMLGenerator.sh: Línea 7: error de sintaxis cerca de símbolo inesperado 'fi' ConstruedTermsXMLGenerator.sh: línea 7: 'fi ' – Mohan

+0

@Mohan, entonces quizás @Sigtran es correcto; ¿Este archivo se originó en Windows? Si es así, ejecute 'dos2unix' o' dtox' o uno de esos tipos similares de herramientas para eliminar todos los caracteres '\ r' adicionales del archivo. – sarnold

+0

Pero, la misma secuencia de comandos funciona bien cuando se coloca en el directorio/tmp y se ejecuta. ¿Cómo es esto posible? – Mohan

13

Su problema es que el archivo tiene terminaciones de línea en Windows. Esto puede deberse a la edición de un archivo en Windows e intentar ejecutarlo en un sistema que no sea de Windows.

Puede solucionar este problema utilizando dos2unix para convertir los finales de línea:

dos2unix ConstruedTermsXMLGenerator.sh 

La utilidad correspondiente a convertir en la otra dirección es unix2dos.

Algunos sistemas tienen fromdos y todos.

+0

@Mohan, si transfiere su script desde Windows a * nix, asegúrese de transferirlo como ascii. Si lo eliminas, debes usar 'dos2unix' en el lado remoto. O use un editor de texto que pueda guardarse en formato "unix". –

+0

Notepad ++ en Windows utilizando la codificación Ansi hace esto para sh archivos. Utilice "Guardar como archivo bash de Unix" en lugar de "Guardar". –

0

Tuve este problema al crear un archivo .sh en una Mac (Unix) y ejecutarlo en Linux. Resulta que tuve que establecer la configuración de FTP FileZilla a 'binario' tipo de transferencia:

  • "Ajustes> Transferencias> Tipos de archivo> Transferencia de defecto de tipo" a "binario" (en lugar de " Auto ")
0

que tenía el mismo error y lo que hice fue transformar los caracteres '\r' a '\n'. el uso de esta línea:

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

Creo que también se puede borrar los caracteres '\ r' mediante el uso de:

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

tr es la trasnform comando, y el -d es borrar el carácter siguiente.

Creo que al caparazón en realidad no le gusta el carácter '\r'.

0

Puede utilizar sed -i 's/\r$//' scriptname.sh

Vuelva a colocar el nombre del script con scriptname real.