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.