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é?
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é?
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.
También obtendrá esto si redirige el resultado de un script que contiene redirecciones. No me preguntes cómo sé esto. –
@PaulJackson, ... eso no es verdad. Como demostrador de copiar y pegar: 'sh -c 'echo hello>/tmp/hello'>/tmp/world' funciona correctamente. –
¿Tiene una variable llamada OUPUT_RESULTS
o es la más probable OUTPUT_RESULTS
?
[email protected]:~/junk$ ABC=junk.txt
[email protected]:~/junk$ echo "Booger" > $ABC
[email protected]:~/junk$ echo "Booger" >> $ABB
bash: $ABB: ambiguous redirect
[email protected]:~/junk$
Si su 'ABC =" archivo basura.txt "', esto todavía tendría el problema. –
¿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}
)
¡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
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
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. –
@ttmrichter, ¡ES IMPORTANTE! – ghostdog74
Soy corregido. Extraño, nunca he visto eso en el pasado. –
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
Muy interesante. Esto no merece un voto negativo. –
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.
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.
no estás mostrando todo. donde obtuviste '$ {OUPUT_RESULTS}'. También es un error de ortografía si quería decir '$ OUTPUT_RESULTS}' – ghostdog74