Linux

tee 並分配給變數?

  • October 29, 2019

我需要在螢幕上看到輸出,同時 grep 輸出並將 grep 結果發送到變數。我認為它可以用 tee 來完成,但我不知道具體如何。我試過

mycommand | tee myvar=$(grep -c keyword)
mycommand | tee  >(myvar=$(grep -c keyword))

但這不起作用。應該如何,最好不要寫入文件?

你會這樣做:

myvar=$( mycommand | tee /dev/tty | grep -c keyword )

使用 tee 將輸出直接傳送到終端,同時使用 stdout 解析輸出並將其保存在變數中。

您可以通過一些文件描述符雜耍來做到這一點:

{ myvar=$(mycommand | tee /dev/fd/3 | grep keyword); } 3>&1

說明:文件描述符#0用於標準輸入,#1用於標準輸出,#2用於標準錯誤;#3 通常不用。在此命令中,將3>&1FD #1(標準輸出)複製到 #3,這意味著在 中{ },有兩種​​方法可以將輸出發送到終端(或標準輸出的任何地方)。

僅擷取 FD #1,因此從其內部發送到 #3的$( )任何內容都會繞過它。這正是tee /dev/fd/3其輸入的作用(以及將其複製到其標準輸出,即grep命令的標準輸入)。

從本質上講,FD #3 被用來走私輸出通過$( )擷取。

引用自:https://serverfault.com/questions/989742