Apakah ada perbedaan antara unbuffer(1) dan stdbuf(1)? Dari apa yang saya kumpulkan, unbuffer membuat lebih dari "upaya terbaik" untuk memanggil fungsi libc set(X)buf di awal, dan kemudian membiarkannya?
Jawaban yang Diterima:
Mereka bekerja dengan cara yang sangat berbeda.
Program unbuffer menggunakan harapan untuk menjalankan perintah bernama. Karena expect membuat pseudo-tty untuk dilampirkan ke stdout dari proses anak, anak mungkin tertipu dengan berpikir bahwa itu harus menggunakan buffering baris daripada buffering blok. Beberapa program akan mengubah perilakunya ketika isatty(stdout) benar, yang lain tidak dan sangat sulit untuk mengetahui mana yang akan dan mana yang tidak.
Program stdbuf mencoba menempatkan libstdbuf di depan libc untuk binari yang dimuat secara dinamis. Di mana libstdbuf mendefinisikan ulang strategi buffering default dari panggilan libc stdio.
Saya menemukan ini oleh
apt-get source expect coreutils
dan membaca sumber yang relevan untuk setiap program.