¿Por qué la salida de algunos programas de Linux no va a STDOUT ni STDERR?
En realidad, quiero saber cómo capturar de manera confiable todos los resultados del programa, sin importar qué 'transmisión' use. El problema que tengo es que algunos programas no parecen permitir que se capture su salida.
Un ejemplo es el comando 'tiempo':
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
o
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
¿Por qué veo la salida en ambas ocasiones? Esperaba que todo se canalizara a / dev / null .
¿Qué flujo de salida usa el tiempo y cómo puedo canalizarlo a un archivo?
Una forma de solucionar el problema es crear un script Bash , por ejemplo, que combine.sh
contenga este comando:
$@ 2>&1
Entonces la salida de 'tiempo' puede capturarse de la manera correcta:
combine.sh time sleep 1 &> /dev/null
(no se ve salida - correcto)
¿Hay alguna manera de lograr lo que quiero sin usar un script de combinación por separado?
2>&1 > /dev/null
significa "2 ahora va a donde va 1 (es decir, el terminal, por defecto), y luego 1 ahora va a / dev / null (¡pero 2 todavía va al terminal!). use>/dev/null 2>&1
para decir "1 va ahora a / dev / null, luego 2 va a donde va 1 (es decir, también a / dev / null). Esto todavía no funcionará aquí ya que el 'tiempo' incorporado no se redirigirá, pero es más correcto en general (por ejemplo, funcionaría si usa / usr / bin / time). Piense en "2> & 1" como copiando la "dirección" de 1 en 2, no como 2 yendo a 1