![用於在不同執行緒上同時將輸出列印到控制台和檔案的命令](https://rvso.com/image/1400518/%E7%94%A8%E6%96%BC%E5%9C%A8%E4%B8%8D%E5%90%8C%E5%9F%B7%E8%A1%8C%E7%B7%92%E4%B8%8A%E5%90%8C%E6%99%82%E5%B0%87%E8%BC%B8%E5%87%BA%E5%88%97%E5%8D%B0%E5%88%B0%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%92%8C%E6%AA%94%E6%A1%88%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我正在編寫一個 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"
command
tail
-n +1
從tail(1)
手冊頁:
-n, --lines=K 輸出最後 K 行,而非最後 10 行; 或使用 -n +K 輸出從第 K 開始的行
第一行清除文件的內容,以防出現競爭條件,其中tail
先前命中了文件command
。