GNU/Linux >> Znalost Linux >  >> Linux

`unbuffer` nebo `stdbuf` pro odstranění Stdout vyrovnávací paměti?

Existuje rozdíl mezi unbuffer(1) a stdbuf(1)? Z toho, co jsem zjistil, unbuffer vynakládá více než jen „nejlepší snahu“ zavolat na začátku funkci libc set(X)buf a pak nechat věci být?

Přijatá odpověď:

Fungují zcela odlišnými způsoby.

Program unbuffer používá očekávat spuštění pojmenovaného příkazu. Protože program expect vytváří pseudo-tty, který se připojí k stdout podřízeného procesu, dítě by se mohlo zmást, aby si myslelo, že by mělo používat ukládání do vyrovnávací paměti namísto ukládání do vyrovnávací paměti bloků. Některé programy změní své chování, když je isatty (stdout) pravdivé, jiné ne a je velmi těžké zjistit, které ano a které ne.

Program stdbuf se pokouší umístit libstdbuf před libc pro dynamicky načítané binární soubory. Kde libstdbuf předefinuje výchozí strategii ukládání do vyrovnávací paměti volání libc stdio.

Zjistil jsem to pomocí

 apt-get source expect coreutils

a čtení příslušného zdroje pro každý program.


Linux
  1. Pochopení YAML pro Ansible

  2. YAML pro začátečníky

  3. DNF pro uživatele APT

  1. Jak rozdělit soubor jako Split to Stdout pro připojení k příkazu?

  2. Umístění zdroje libc – ke stažení nebo online prohlížení?

  3. předat stdout jako název souboru pro příkazový řádek util?

  1. Je bezpečné zakázat ukládání do vyrovnávací paměti pomocí stdout a stderr?

  2. Odstranění části názvu souboru pro více souborů v systému Linux

  3. Je možné, že linuxový deskriptor souboru 0 1 2 není pro stdin, stdout a stderr?