GNU/Linux >> Belajar Linux >  >> Linux

`unbuffer` Atau `stdbuf` Untuk Menghapus Stdout Buffering?

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.


Linux
  1. Memahami YAML untuk Ansible

  2. YAML untuk pemula

  3. DNF untuk pengguna APT

  1. Bagaimana Cara Memecah File Seperti Split To Stdout Untuk Piping Ke Perintah?

  2. Buang Stdout Of A Command Selama T Detik?

  3. Skrip Nohup untuk Python tidak berfungsi saat berjalan di latar belakang dengan &

  1. lokasi sumber libc - untuk diunduh atau dilihat secara online?

  2. lulus stdout sebagai nama file untuk utilitas baris perintah?

  3. Apakah aman untuk menonaktifkan buffering dengan stdout dan stderr?