GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la salida de algunos programas de Linux no va ni a STDOUT ni a STDERR?

Esta pregunta se aborda en BashFAQ/032. En tu ejemplo, harías lo siguiente:

{ time sleep 1; } 2> /dev/null

La razón por la cual

time sleep 1 2>/dev/null

no se comporta como espera porque con esa sintaxis, querrá time el comando sleep 1 2>/dev/null (sí, el comando sleep 1 con stderr redirigido a /dev/null ). El time incorporado funciona de esa manera para que esto sea realmente posible.

El bash integrado en realidad puede hacer esto porque... bueno, es un incorporado. Tal comportamiento sería imposible con el comando externo time generalmente ubicado en /usr/bin . De hecho:

$ /usr/bin/time sleep 1 2>/dev/null
$

Ahora, la respuesta a tu pregunta

¿Por qué la salida de algunos programas de Linux no va ni a STDOUT ni a STDERR?

es:lo hace, la salida va a stdout o stderr .

¡Espero que esto ayude!


Tu pregunta particular sobre time incorporado ha sido respondido, pero hay hay algunos comandos que tampoco escriben en stdout o al stderr . Un ejemplo clásico es el comando de Unix crypt . crypt sin argumentos cifra la entrada estándar stdin y lo escribe en la salida estándar stdout . Solicita al usuario una contraseña usando getpass() , que por defecto envía un aviso a /dev/tty . /dev/tty es el dispositivo terminal actual. Escribiendo a /dev/tty tiene el efecto de escribir en el terminal actual (si hay uno, consulte isatty() ).

La razón crypt no puedo escribir a stdout es porque escribe la salida cifrada en stdout . Además, es mejor preguntar a /dev/tty en lugar de escribir a stderr de modo que si un usuario redirige stdout y stderr , el indicador todavía se ve. (Por la misma razón, crypt no puedo leer la contraseña de stdin , ya que se usa para leer los datos para cifrar).


Linux
  1. ¿Cómo redirigir la salida del comando de tiempo a un archivo en Linux?

  2. Agregue un tiempo específico mientras usa la fecha del comando de Linux

  3. ¿Por qué el preprocesador de C interpreta la palabra linux como la constante 1?

  4. ¿Por qué pr_debug del kernel de Linux no da ningún resultado?

  5. Determinar si la salida es stdout o stderr

Comprobar la zona horaria en Linux

¿Por qué el tiempo de Unix comienza en 1970-01-01?

Linux:¿por qué Rsync en Linux no conserva todas las marcas de tiempo (hora de creación)?

Entendiendo el comando time en Linux

¿Por qué la salida de openssl passwd es diferente cada vez?

Linux:¿Cómo usar un archivo como entrada y salida al mismo tiempo?