GNU/Linux >> Linux Esercitazione >  >> Linux

`unbuffer` o `stdbuf` per rimuovere il buffering Stdout?

C'è una differenza tra unbuffer(1) e stdbuf(1)? Da quello che ho capito, unbuffer fa più del "miglior sforzo" di chiamare la funzione libc set(X)buf all'inizio, e poi lasciare che le cose siano?

Risposta accettata:

Funzionano in modi completamente diversi.

Il programma unbuffer utilizza Expect per eseguire il comando denominato. Poiché Expect crea uno pseudo-tty da collegare allo stdout del processo figlio, il bambino potrebbe essere indotto a pensare che dovrebbe utilizzare il buffer di linea invece del buffer di blocco. Alcuni programmi cambieranno il loro comportamento quando isatty(stdout) è vero, altri no ed è molto difficile sapere quale lo farà e quale no.

Il programma stdbuf tenta di mettere libstdbuf davanti a libc per i binari caricati dinamicamente. Dove libstdbuf ridefinisce la strategia di buffering predefinita delle chiamate libc stdio.

L'ho scoperto da

 apt-get source expect coreutils

e leggere la fonte pertinente per ogni programma.


Linux
  1. È sicuro disabilitare il buffering con stdout e stderr?

  2. Rimozione di parte di un nome file per più file su Linux

  3. Lo script Nohup per Python non funziona durante l'esecuzione in background con &

  4. Perché nm non mostra simboli per /lib/i386-linux-gnu/libc.so.6?

  5. Ciclo for nidificato

4 distribuzioni Linux per i giochi

Un'introduzione a bpftrace per Linux

Scegliere una stampante per Linux

Bash For Loop

Guida completa per la rimozione delle immagini Docker

Esiste un equivalente di cd - per cp o mv?