Quiero dirigir la salida de printf
en una secuencia de comandos bash
a stderr
en lugar de stdout
.¿Qué método debo usar para escribir mensajes de error en 'stderr' usando 'printf' en un script bash?
Soy no preguntar acerca de la redirección sea stderr
o stdout
desde donde quiera que se encaminan actualmente. Solo quiero poder enviar la salida de printf
a stderr
en lugar de a la predeterminada de stdout
.
Experimenté un poco y descubrí que anexando 1>&2
al , como se muestra en el ejemplo siguiente, parece que hago lo que quiero. Sin embargo, tengo no experiencia usando bash. Entonces mi pregunta primaria es si hay una forma de "mejor" para hacer esto en bash
?
Por "mejor" Quiero decir, ¿hay otra forma de hacer esto que sea más comúnmente utilizada, más convencional o más idiomática? ¿Cómo lo haría un programador de bash más experimentado?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
también tengo una pregunta secundaria. Lo estoy pidiendo no tanto porque yo necesito para saber, pero más porque solo tengo curiosidad y me gustaría tener una mejor comprensión de lo que está sucediendo.
Parece que lo anterior solo funcionará cuando se ejecute dentro de un script de shell. No parece funcionar cuando lo intento desde una línea de comando.
Aquí hay un ejemplo de lo que quiero decir.
[email protected]:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
[email protected]:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
Yo esperaría que el comando anterior printf
no tener salida, ya que la salida debe ir a stderr
, que a su vez debería ir a un archivo. Pero esto no sucede. ¿Huh?
Sí, de hecho, '2> errors.txt 1> & 2' es lo que debería haber intentado usar. Me siento tonto en retrospectiva, pero este parece ser uno de esos errores tontos que tengo que seguir haciendo hasta que la forma correcta de hacerlo se vuelva "obvia" para mí. ;-) Muchas gracias por la comprensión. –