Shell在 OpenBSD 中關閉
在 OpenBSD 中關閉 hping
的緩衝
當管道傳輸到進一步的逐行處理時,輸出似乎
hping
是完全緩衝的,因此管道 hping 到 perl不起作用。perl
hping --icmp-ts example.ca | perl -ne 'if (/Originate=(\d+) Receive=(\d+) Transmit=(\d+)/) { ($o, $r, $t) = ($1, $2, $3); } if (/tsrtt=(\d+)/) { print $r - $o, " ", $o + $1 - $t, "\n"; }'
如何在管道傳輸時將 hping 從完全緩衝更改為行緩衝?
不是以下問題的重複,因為在 OpenBSD 基礎中沒有解決方案有效:
有兩種常見的解決方案,
stdbuf
和unbuffer
。
stdbuf
來自 GNU coreutils,它是在 2009 年的 7.5 版中添加的,因此它已進入除 CentOS 5 之外的所有目前非嵌入式 Linux 系統。自 8.4 版以來它也在 FreeBSD 中。據我所知,目前還沒有其他 unix 變體採用它,尤其是 OpenBSD 5.4 版本。
unbuffer
是一個Expect腳本,因此在任何可以使用 Expect 的地方都可以使用,其中幾乎包括任何 unix。所有 BSD 變體都在其埠集合中,在expert
包中。所以安裝
expect
包並執行unbuffer hping … | perl …