Câu trả lời:
Họ làm việc theo những cách hoàn toàn khác nhau.
Chương trình unbuffer sử dụng mong đợi để chạy lệnh được đặt tên. Bởi vì kỳ vọng sẽ tạo ra một giả để gắn vào thiết bị xuất chuẩn của quá trình con, nên đứa trẻ có thể bị lừa nghĩ rằng nó nên sử dụng bộ đệm dòng thay vì đệm khối. Một số chương trình sẽ thay đổi hành vi của họ khi isatty (stdout) là đúng, những chương trình khác sẽ không và rất khó để biết cái nào sẽ và cái nào sẽ không.
Chương trình stdbuf cố gắng đặt libstdbuf trước libc cho các nhị phân được tải động. Trong đó libstdbuf định nghĩa lại chiến lược đệm mặc định của các lệnh gọi libc stdio.
Tôi phát hiện ra điều này bởi
apt-get source expect coreutils
và đọc các nguồn có liên quan cho mỗi chương trình.
unbuffer -p
có thể hoạt động không chính xác nếu quá trình cấp dữ liệu đầu vào cho bộ đệm không thoát. Xem xét:process1 | unbuffer -p process2 | process3
Nếu process1 thoát, process2 có thể chưa kết thúc.