Tee

tee 命令是如何工作的?

  • April 27, 2018

在遇到大約 3 個tee我認為不具指導性的解釋後,我會要求對這個命令進行簡單、通用和逐步(如果可能)的解釋,針對 Linux 新手。

我確實了解我們通過管道、命令的標準輸出或直接使用某個文件來使用它,但我想我想念該命令對這些內容的實際作用以及它何時有用。

所以這就是我的要求,希望找到一個說教的解釋,以一種清晰、有步驟的方式為新人服務:

  1. 該命令如何與命令的標準輸出或文件本身一起使用?
  2. 為什麼常說tee讀取標準輸入?我的意思是,如果我這樣做ls -ltee則不會讀取語法ls -l本身,而是讀取它列印到會話中的標準輸出。

另外,如果你願意,請分享你日常工作中的一個實際例子,什麼時候tee對你很有用?

tee我係統上的手冊:

tee 實用程序將標準輸入複製到標準輸出,在零個或多個文件中進行複制。輸出是無緩衝的。

因此,它從標準輸入讀取數據並將其複製到標準輸出,同時將流複製到一個或多個文件中。

在以下管道中,tee將獲取管道中第一個命令的輸出並將其複製到標準輸出(終端),同時在文件中複製它onetwo並且three

$ somecommand | tee one two three

tee有很多用途,一種是結合sudo將輸出重定向到 root 擁有的文件:

$ somecommand | sudo tee /root/somefile >/dev/null

由於重定向是以非特權使用者身份發生的,因此以下操作將不起作用(它也somecommand將以 root 身份執行,這可能是不需要的):

$ sudo somecommand >/root/somefile

一次將一組固定的行附加到多個文件的人工範例(到所有使用者~/.profile文件,假設*擴展為使用者名並且擴展的命令行不會變得太長以使 shell 無法處理):

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

使用的真實範例tee

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

這是我建構 OpenBSD 基礎系統。doasOpenBSD 的“等價物”,sudo並且box-build.sh是一個用於建構的小型 shell 腳本(本質上cd /usr/src && make obj && make build)。我想儲存整個建構過程的輸出,包括任何錯誤或警告,但我不想讓所有東西都湧入我的終端。為此,我使用tee將所有內容保存到build.out然後grep僅提示我們在終端中的程序位置。

另請參閱此處帶有tee標籤的其他問題。

引用自:https://unix.stackexchange.com/questions/362090