Utilities
unbuffer
或 stdbuf
用於刪除標準輸出緩衝?
unbuffer(1) 和 stdbuf(1) 有區別嗎?據我所知, unbuffer 所做的不僅僅是在開始時呼叫 libc 函式 set(X)buf 的“最大努力”,然後讓事情順其自然嗎?
它們以完全不同的方式工作。
程序 unbuffer 使用 expect 來執行指定的命令。因為 expect 創建了一個偽 tty 來附加到子程序的標準輸出,所以子程序可能會被愚弄以為它應該使用行緩衝而不是塊緩衝。當 isatty(stdout) 為真時,一些程序會改變它們的行為,而另一些則不會,而且很難知道哪個會,哪個不會。
程序 stdbuf 嘗試將 libstdbuf 放在 libc 前面以用於動態載入的二進製文件。其中 libstdbuf 重新定義了 libc stdio 呼叫的預設緩衝策略。
我發現了這個
apt-get source expect coreutils
並閱讀每個程序的相關來源。