2010-03-17 36 views
117

La siguiente línea en mi guión Bash"redireccionamiento ambigua" error

echo $AAAA"  "$DDDD"   "$MOL_TAG >> ${OUPUT_RESULTS} 

me da este error:

line 46: ${OUPUT_RESULTS}: ambiguous redirect 

¿Por qué?

+6

no estás mostrando todo. donde obtuviste '$ {OUPUT_RESULTS}'. También es un error de ortografía si quería decir '$ OUTPUT_RESULTS}' – ghostdog74

Respuesta

190

Bash puede ser bastante obtuso veces.

Los siguientes comandos de todos los devuelven diferentes mensajes de error para básicamente el mismo error:

$ echo hello > 
bash: syntax error near unexpected token `newline` 

$ echo hello > ${NONEXISTENT} 
bash: ${NONEXISTENT}: ambiguous redirect 

$ echo hello > "${NONEXISTENT}" 
bash: : No such file or directory 

Adición comillas alrededor de la variable parece ser una buena manera de lidiar con el mensaje "redirección ambigua": Se tiende a conseguir un mensaje mejor cuando se ha cometido un error de escritura - y cuando el error es debido a los espacios en el nombre del archivo, el uso de citas es el punto de referencia.

+0

También obtendrá esto si redirige el resultado de un script que contiene redirecciones. No me preguntes cómo sé esto. –

+0

@PaulJackson, ... eso no es verdad. Como demostrador de copiar y pegar: 'sh -c 'echo hello>/tmp/hello'>/tmp/world' funciona correctamente. –

5

¿La ruta especificada en $ {} OUPUT_RESULTS contener espacios en blanco? Si es así, es posible que desee considerar el uso de ... >> "${OUPUT_RESULTS}" (utilizando comillas).

(También puede desear considerar el cambio de nombre de la variable a ${OUTPUT_RESULTS})

+0

¡Muchas gracias a los cuatro videntes! Sin embargo, es un poco amargo que por alguna razón se haya aceptado una respuesta que se hizo 1,5 años después de la mía, pero que ofrecía exactamente la misma solución (agregar presupuestos). – Thomas

13

cotizaciones de venta alrededor de su variable. Si tiene espacios, también le dará una "redirección ambigua". También comprobar la ortografía

echo $AAAA"  "$DDDD"   "$MOL_TAG >> "${OUPUT_RESULTS}" 

ejemplo de redirección ambigua

$ var="file with spaces" 
$ echo $AAAA"  "$DDDD"   "$MOL_TAG >> ${var} 
bash: ${var}: ambiguous redirect 
$ echo $AAAA"  "$DDDD"   "$MOL_TAG >> "${var}" 
$ cat file\ with\ spaces 
aaaa  dddd   mol_tag 
+1

Las citas no importan. Si hay espacios en la expansión de la variable solo obtendrá cosas que van al archivo incorrecto y/o mensajes de error espurios que involucran la parte posterior al espacio del nombre del archivo. –

+3

@ttmrichter, ¡ES IMPORTANTE! – ghostdog74

+0

Soy corregido. Extraño, nunca he visto eso en el pasado. –

4

que he encontrado recientemente que los espacios en blanco en el nombre del archivo de redirección hará que el mensaje de "redirección ambigua".

Por ejemplo, si redirige a application$(date +%Y%m%d%k%M%S).log y especifica los caracteres de formato incorrectos, la redirección fallará antes de las 10 a. M., Por ejemplo. Sin embargo, si usaste application$(date +%Y%m%d%H%M%S).log, tendría éxito. Esto se debe a que el formato %k produce ' 9' de 9 a.m. donde %H produce '09' de las 9 am.

echo $(date +%Y%m%d%k%M%S) da 20140626 95138

echo $(date +%Y%m%d%H%M%S) da 20140626095138

La fecha errónea puede dar algo como:

echo "a" > myapp20140626 95138.log 

donde lo siguiente es lo que se desea:

echo "a" > myapp20140626095138.log 
+0

Muy interesante. Esto no merece un voto negativo. –

1

Otra cosa que puede causar "redirección ambigua" es \t\n\r en el nombre de la variable que está escribiendo no demasiado

Tal \n\r? Pero errar por el lado de la precaución

probar este

echo "a" > ${output_name//[$'\t\n\r']} 

Me golpearon con éste al analizar HTML, aquí \t al principio de la línea.

1

que acaba de tener este error en un script bash. El problema fue accidental \ al final de la línea anterior que generaba un error.

Cuestiones relacionadas