很多情況下,我們需要儲存程式/命令的輸出到本地,常用的一種方法是重定向,這也是一種很好的方法。但有個問題,如果你想要做後續操作,比如要統計輸出的行數等,重定向就有困難了。
這時候,tee
命令就派上用場啦~
tee 語法格式:
$ tee [OPTIONS] [FILE]
這個命令有 4 個主要選項,配合這些選項可以將結果儲存在一個或者多個檔案中。4 個選項介紹如下:
Options:
Name | Description |
---|---|
-a or –append | 用於在現有檔案的末尾追加寫入資料 |
-i or –ignore-interrupts | 用於忽略中斷訊號 |
–help | 用於顯示此命令的所有可用選項 |
–version | 用於顯示命令的當前版本 |
Files:
即目標檔案,可以是一個或者多個檔案,用於儲存 tee 命令的輸出。
1. tee 命令基礎用法
在 Linux 中,我們可以使用 ls -la
用來檢視當前目錄裡檔案的詳細資訊,想必大家都用過。現在,我們想要儲存 ls -la 命令的輸出到檔案 output.txt 中,我們可以這樣操作:
$ ls -la | tee output.txt
$ cat output.txt
Output:
在這裡,第一個命令將 ls -la
的輸出顯示到終端,並將輸出寫入到檔案 output.txt 。第二個命令顯示了 output.txt 檔案的具體內容,如下圖所示:
2. 將輸出追加到現有檔案中
如果我們使用帶有 -a
選項的 tee 命令的話,那麼它會將命令的輸出追加寫入到現有檔案,不會覆蓋該檔案原有的內容。
例如,我們想將 pwd 命令的輸出追加到已有檔案 output.txt 的末尾,可以這樣執行以下命令:
$ pwd | tee -a output.txt
$ cat output.txt
在這裡,第一個命令將 pwd
的輸出顯示到終端,並在 output.txt 檔案的末尾追加 pwd 的輸出。第二個命令則用於檢視輸出檔案的內容。如下圖所示, output.txt 檔案包含前一個示例和當前示例的輸出
[圖]
3. 輸出寫入多個檔案
tee
命令也可以將各種命令的輸出儲存到多個檔案中。這種情況下,我們需要使用空格隔開這些檔名。比如,我們想將 date
命令的輸出儲存到兩個檔案 output1.txt 和 output2.txt 中,我們可以這樣執行命令:
$ date | tee output1.txt output2.txt
$ cat output1.txt output2.txt
Output:
在這裡,第一個命令顯示當前系統日期,並將值儲存到兩個檔案 output1.txt 和 output2.txt 中。第二個命令顯示這兩個檔案的內容,具體結果如下:
4. 忽略中斷訊號
大家知道,命令/程式在收到中斷訊號時,將被訊號所中斷。如果 tee
命令在執行過程中不想被中斷,我們可以使用帶 -i
選項來忽略命令執行時的中斷訊號。這種情況下,即使我們按下 CTRL + C ,命令仍會正確執行。例如:
$ wc -l output.txt | tee -i output3.txt
$ cat output.txt
$ cat output3.txt
Output:
在這裡,第一個命令是計算 output.txt 檔案的總行數,並將輸出儲存到檔案 output3.txt 中。第二個命令顯示了 output.txt 檔案的具體內容,而第三個命令顯示 output3.txt 的內容,它與 wc -l output.txt
的輸出相同。
5. 將 tee 命令輸出通過管道傳遞給另一個命令
我們可以使用管道將 tee
命令的輸出傳遞給另一個命令。在本例子中,ls
命令將輸出傳遞給 tee
命令,tee
命令的輸出傳遞給 wc
命令,如下所示:
$ ls | tee output4.txt | wc -lcw
$ ls
$ cat output4.txt
Output:
在這裡,第一個命令用於將 ls
命令的輸出寫入檔案 output4.txt ,並計算 output4.txt 的行數、字數和字元數。第二個命令用於顯示 ls
命令的輸出,第三個命令用於檢視 output4.txt 檔案的內容。
6. 使用 bash 指令碼執行 tee 命令
除了 Linux 命令,tee
命令也可將 bash 指令碼輸出寫入到檔案中。比如,我們使用以下程式碼建立名為 add.sh 的 bash 指令碼,該指令碼將從命令列引數中獲取兩個輸入數字,並列印這兩個數字的和。
add.sh
#!/bin/bash
a = $1
b = $2
((result= $a + $b))
echo "The addition of $a+$b=$result"
如果我們想使用 tee
命令將 add.sh 指令碼的輸出寫入到檔案 result.txt 中,我們可以這樣操作:
$ bash add.sh 50 90 | tee result.txt
$ cat result.txt
Output:
在這個例子裡,數字 50 和 90 作為命令列引數傳遞給指令碼 add.sh,然後它的輸出通過 tee
命令寫入到檔案 result.txt 中。之後我們再用 cat
命令來檢視 result.txt 檔案的內容:
7. 隱藏 tee 輸出
如果我們想要將目標命令的輸出直接寫入檔案而不在終端中顯示,那我們可以將 tee
命令結果重定向到 /dev/null
中,比如:
$ df | tee output5.txt > /dev/null
$ cat output5.txt
Output:
在這裡,第一個命令用於將 df
命令的輸出寫入檔案 output5.txt 中,同時命令的結果不回顯在終端中。第二個命令用於檢視 output5.txt 檔案內容 。
大家都學會了嗎?
-----------------
我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注我的公眾號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入群」進入高手如雲技術交流群。