用於在不同執行緒上同時將輸出列印到控制台和檔案的命令

用於在不同執行緒上同時將輸出列印到控制台和檔案的命令

我正在編寫一個 bash 腳本,希望最後一個命令作為單獨的進程啟動。最後一個命令還將所有輸出發送到檔案。然而,我也希望輸出仍然出現在控制台上。到目前為止我所擁有的是

$ command > "file" &

這會將輸出發送到“檔案”,並將命令作為自己的進程啟動。但是,我還想同時在控制台中查看輸出(但如果我按 ctrl+c 或 w/e,命令不會停止)。這很像這個問題,但需要注意的是它需要有自己的線程。

我努力了:

$ command | tee "file" &

但問題是 tee 不是過程的一部分,而且輸出實際上並沒有出現。

所以,為了澄清一下,我想要有command自己的進程,將輸出發送到文件,但仍然讓輸出出現在控制台中(直到我按 q、enter、ctrl+c 或其他鍵)。由於這是在 bash 腳本中,因此可以接受兩行單獨的行。

答案1

聽起來您想command完成對文件的寫入,但您希望能夠中斷控制台的顯示。我會採取不同的方法來解決問題。在你的腳本中:

> "file"
command > "file" &
tail -n +1 -F "file"

更正:

使用的原始答案-n 0最初不會輸出任何行,但輸出啟動後"file"新增的任何行。這不是我的本意──這是一個錯誤。我打算使用一個選項來列出所有行,即使在啟動之前已經寫了一些行。該行為的正確選項是."file"tail"file"commandtail-n +1

tail(1)手冊頁:

   -n, --lines=K 輸出最後 K 行,而非最後 10 行;
                   或使用 -n +K 輸出從第 K 開始的行

第一行清除文件的內容,以防出現競爭條件,其中tail先前命中了文件command

相關內容