2011-02-23 25 views
12

Aquí es la parte infractora de mi guión:lectura: Ilegal opción -d

read -d '' TEXT <<'EOF' 
Some Multiline 
text that 
I would like 
in 
a 
var 
EOF 

echo "$TEXT" > ~/some/file.txt 

y el error:

read: 175: Illegal option -d 

utilizo este -d leer todo el lugar y funciona bien . No estoy seguro de por qué no es feliz ahora. Estoy ejecutando el script en Ubuntu 10.10

¿Correcciones? ¿Soluciones provisionales?

+0

Supongo que está utilizando el shell 'bash' en Ubuntu. Si es así, ¿'help read' muestra la opción' -d'? – SiegeX

Respuesta

15

Si ejecuta sh y luego tratar ese comando, se obtiene:

read: 1: Illegal option -d 

Si lo hace al mismo tiempo en bash, funciona bien. Por lo tanto, deduzca que su script es no ejecutándose bajo bash.

Asegúrese de que el guión comienza con la línea:

#!/usr/bin/env bash 

(o equivalente) para que el shell esperado se mueve el guión.

Alternativamente, si no se puede hacer eso (porque el guión no es un bash uno), acaba de ser conscientes de que es una característica -dbash y puede que no esté disponible en otros proyectiles. En ese caso, deberá encontrar otra forma.

+0

HA! Tan pequeño, tan fácil de perder. En función de su respuesta, necesitaba 'chmod 775 thefile.sh; ./thefile.sh' porque 'sh thefile.sh' era el culpable. Además, estoy usando el shebang '#!/Bin/bash' sin problemas. +1 – Jacksonkr

4

La opción -d a read es una característica única de fiesta, no es parte del estándar POSIX (que sólo especifica -r y -p opciones para read). Cuando ejecuta su script con sh en Ubuntu, se ejecuta con dash, que es un shell POSIX, y no bash. Si desea que la secuencia de comandos se ejecute en bash, debe ejecutarlo con bash, o darle un shebang #!/bin/bash. De lo contrario, se debe esperar que se ejecute bajo cualquier POSIX sh.