2016-12-07 45 views
1

通常,如果我想打印命令的輸出並且另外在文件中捕獲該輸出,則可以使用tee作爲解決方案。但我正在使用一個似乎有特殊行爲的工具來製作腳本。這是wps無線評估工具欺負直到cmd完成後tee輸出纔會出現

如果我正常運行bully命令(沒有tee),輸出將以標準方式逐步顯示。但是,如果我把管道放在最後以這種方式登錄| tee "/path/to/my/logfile",屏幕上的輸出會凍結。它直到命令結束才顯示任何內容。結束後,它顯示了所有內容(不是一步一步地),當然它也將輸出放在日誌文件中。

欺負命令的例子:bully wlan0mon -b 00:11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee /root/Desktop/log.txt

爲什麼?不知道它是否只發生在惡霸或其他程序具有相同的行爲。

是否有另一種方法來捕獲輸出到屏幕上實時輸出的文件中?

+1

可能的原因:當標準輸出未連接到終端(如管道)時,欺負將輸出緩衝更改爲*完全緩衝*。 – Jens

+0

請參見[如何使輸出的任何shell命令無緩衝?](http://stackoverflow.com/q/3465619/4154375)。 – pjh

回答

2

你看到的是完全緩衝與行緩衝。默認情況下,當stdout寫入tty(即交互式)時,您將擁有行緩衝,相反,默認情況下會完全緩衝。您可以查看setvbuf(3)手冊頁以獲取更詳細的說明。

某些命令提供了強制行緩衝的選項(例如,GNU grep具有行緩衝)。但是這種選擇並不普遍。

如果您希望能夠更加交互式地查看輸出(當然,取決於期望的代價),另一種選擇是使用類似expect的unbuffer命令。

+1

是的,在命令前使用unbuffer做了訣竅......現在它逐步顯示屏幕上的輸出並使用「行緩衝」保存到文件,所以我的命令是:'unbuffer bully wlan0mon -b 00: 11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee/root/Desktop/log.txt「 – OscarAkaElvis

相關問題