GNU/Linux >> Linux Esercitazione >  >> Linux

Perché l'output di alcuni programmi Linux non va né a STDOUT né a STDERR?

Questa domanda è affrontata in BashFAQ/032. Nel tuo esempio, dovresti:

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

Il motivo

time sleep 1 2>/dev/null

non si comporta come ti aspetti perché con quella sintassi vorrai time il comando sleep 1 2>/dev/null (sì, il comando sleep 1 con stderr reindirizzato a /dev/null ). Il time integrato funziona in questo modo in modo da renderlo effettivamente possibile.

Il bash integrato può effettivamente farlo perché... beh, è ​​un built-in. Tale comportamento sarebbe impossibile con il comando esterno time di solito si trova in /usr/bin . Infatti:

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

Ora, la risposta alla tua domanda

Perché l'output di alcuni programmi Linux non va né a STDOUT né a STDERR?

è:lo fa, l'output va a stdout o stderr .

Spero che questo aiuti!


La tua domanda particolare su time builtin ha ricevuto una risposta, ma ci sono alcuni comandi che non scrivono nemmeno in stdout o a stderr . Un esempio classico è il comando Unix crypt . crypt senza argomenti crittografa l'input standard stdin e lo scrive nello standard output stdout . Richiede all'utente una password usando getpass() , che per impostazione predefinita restituisce un prompt a /dev/tty . /dev/tty è il dispositivo terminale corrente. Scrivendo a /dev/tty ha l'effetto di scrivere sul terminale corrente (se ce n'è uno, vedi isatty() ).

Il motivo crypt non può scrivere a stdout è perché scrive l'output crittografato in stdout . Inoltre, è meglio chiedere a /dev/tty invece di scrivere a stderr in modo che se un utente reindirizza stdout e stderr , il prompt è ancora visibile. (Per lo stesso motivo, crypt non riesco a leggere la password da stdin , poiché viene utilizzato per leggere i dati da crittografare.)


Linux
  1. Configurare la shell per stampare Stderr e Stdout in diversi colori?

  2. Output su Stdout e allo stesso tempo Grep in un file?

  3. Linux:perché gli utenti Linux non utilizzano una chiamata di sistema per ottenere l'ora corrente?

  4. Esempi di comandi temporali di Linux

  5. Perché un Lun World Wide ID inizia con il numero 3 in Linux dm-multipath

Controlla il fuso orario in Linux

Comprendere il comando dell'ora in Linux

Cosa significa il simbolo della pipe Linux | fare?

Perché slabtop -o restituisce solo le prime 23 righe quando il comando viene reindirizzato?

Perché l'output di openssl passwd è diverso ogni volta?

Linux:come utilizzare un file come input e output allo stesso tempo?