Yo uso Notepad++ y escribo:
read s
echo "$s"
La salida es:
Y luego intento poner punto y coma:
read s;
echo "$s"
y la salida es:
Guardo el archivo como q.sh
y lo ejecuto con cygwin pero aún no puedo usar read
el operador, así que me confundo. He probado con otros editores similares vi
pero el resultado es el mismo.
¿Lo que está mal? ¿Cómo hacer que funcione?
Respuesta1
El archivo de texto que constituye el script de shell fue escrito en Notepad++. Este editor guarda archivos como archivos de texto DOS de forma predeterminada que, desde el punto de vista de Unix, tiene un retorno de carro superfluo ( \r
) al final de cada línea. Esto confunde sh
.
Para eliminarlo:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
La secuencia de comandoshaceCarece de una #!
línea (como se señala en los comentarios), pero siempre que lo ejecute con un intérprete explícito ( sh q.sh
), esto no es necesario.
Añadiendo la línea
#!/bin/sh
(después chmod +x q.sh
) haría que ejecutarlo se ./q.sh
comportara exactamente igual que ejecutarlo con sh q.sh
.
Respuesta2
Otra forma de convertir el retorno de carro para Unix, si tienes acceso a Notepad++. En el Bloc de notas, continúe: Editar -> Conversión EOL -> Unix (LF)
En francés, es: Edición -> Convertir les sauts de ligne -> Converti au format Unix (LF)
Puede ser más rápido.