Linux
tee 並分配給變數?
我需要在螢幕上看到輸出,同時 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>&1
FD #1(標準輸出)複製到 #3,這意味著在 中{ }
,有兩種方法可以將輸出發送到終端(或標準輸出的任何地方)。僅擷取 FD #1,因此從其內部發送到 #3的
$( )
任何內容都會繞過它。這正是tee /dev/fd/3
其輸入的作用(以及將其複製到其標準輸出,即grep
命令的標準輸入)。從本質上講,FD #3 被用來走私輸出通過
$( )
擷取。