tee 指令如何運作?

tee 指令如何運作?

在遇到大約 3 個tee我認為缺乏指導意義的解釋後,我會要求針對該命令提供一個簡單、通用和分步(如果可能的話)的解釋,針對 Linux 新手。

我確實知道我們可以透過管道、命令的標準輸出或直接在某個文件上使用它,但我想我錯過了該命令實際上對這些內容執行的操作以及何時它有用。

所以這就是我的要求,希望能找到一個說教性的解釋,以清晰、循序漸進的方式為新手服務:

  1. 該命令如何與命令的標準輸出或檔案本身一起使用?

  2. 為什麼通常說tee讀取標準輸入?我的意思是,如果我這樣做ls -ltee不會讀取語法ls -l本身,而是讀取它印到會話中的標準輸出。

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

答案1

tee我的系統上的手冊:

tee 實用程式將標準輸入複製到標準輸出,從而在零個或多個檔案中進行複製。輸出是無緩衝的。

因此,它從標準輸入讀取並將其複製到標準輸出,同時還將流複製到一個或多個檔案中。

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

$ somecommand | tee one two three

tee有許多用途,其中之一是結合sudo將輸出重定向到 root 擁有的檔案:

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

以下將不是自從重定向以非特權用戶身份發生以來一直有效(它也將以somecommandroot 身份運行,這可能是不需要的):

$ 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「等價」的sudobox-build.sh一個小的 shell 腳本,用於建置(本質上cd /usr/src && make obj && make build)。我想儲存整個建置流程的輸出,包括任何錯誤或警告,但我不想讓所有內容都湧入我的終端。為此,我使用tee將所有內容保存到build.out然後grep僅獲取我們在終端中的進程中的位置的提示。

另請參閱此處標記為的其他問題標籤。

相關內容