不少狀況下,咱們須要保存程序/命令的輸出到本地,經常使用的一種方法是重定向,這也是一種很好的方法。但有個問題,若是你想要作後續操做,好比要統計輸出的行數等,重定向就有困難了。bash
這時候,tee
命令就派上用場啦~app
tee 語法格式:spa
$ tee [OPTIONS] [FILE] 複製代碼
這個命令有 4 個主要選項,配合這些選項能夠將結果存儲在一個或者多個文件中。4 個選項介紹以下:命令行
Options:3d
Name |
Description |
---|---|
-a or –append |
用於在現有文件的末尾追加寫入數據 |
-i or –ignore-interrupts |
用於忽略中斷信號 |
–help |
用於顯示此命令的全部可用選項 |
–version |
用於顯示命令的當前版本 |
Files:code
即目標文件,能夠是一個或者多個文件,用於存儲 tee 命令的輸出。cdn
在 Linux 中,咱們可使用 ls -la
用來查看當前目錄裏文件的詳細信息,想必你們都用過。如今,咱們想要保存 ls -la 命令的輸出到文件 output.txt 中,咱們能夠這樣操做:blog
$ ls -la | tee output.txt
$ cat output.txt 複製代碼
Output:在這裏,第一個命令將 ls -la
的輸出顯示到終端,並將輸出寫入到文件 output.txt 。第二個命令顯示了 output.txt 文件的具體內容,以下圖所示:ip
若是咱們使用帶有 -a
選項的 tee 命令的話,那麼它會將命令的輸出追加寫入到現有文件,不會覆蓋該文件原有的內容。開發
例如,咱們想將 pwd 命令的輸出追加到已有文件 output.txt 的末尾,能夠這樣運行如下命令:
$ pwd | tee -a output.txt
$ cat output.txt複製代碼
在這裏,第一個命令將 pwd
的輸出顯示到終端,並在 output.txt 文件的末尾追加 pwd 的輸出。第二個命令則用於查看輸出文件的內容。以下圖所示, output.txt 文件包含前一個示例和當前示例的輸出
[圖]
tee
命令也能夠將各類命令的輸出存儲到多個文件中。這種狀況下,咱們須要使用空格隔開這些文件名。好比,咱們想將 date
命令的輸出存儲到兩個文件 output1.txt 和 output2.txt 中,咱們能夠這樣執行命令:
$ date | tee output1.txt output2.txt
$ cat output1.txt output2.txt複製代碼
Output:在這裏,第一個命令顯示當前系統日期,並將值存儲到兩個文件 output1.txt 和 output2.txt 中。第二個命令顯示這兩個文件的內容,具體結果以下:
你們知道,命令/程序在收到中斷信號時,將被信號所中斷。若是 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
的輸出相同。
咱們可使用管道將 tee
命令的輸出傳遞給另外一個命令。在本例子中,ls
命令將輸出傳遞給 tee
命令,tee
命令的輸出傳遞給 wc
命令,以下所示:
$ ls | tee output4.txt | wc -lcw
$ ls
$ cat output4.txt 複製代碼
Output:在這裏,第一個命令用於將 ls
命令的輸出寫入文件 output4.txt ,並計算 output4.txt 的行數、字數和字符數。第二個命令用於顯示 ls
命令的輸出,第三個命令用於查看 output4.txt 文件的內容。
除了 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 文件的內容:
若是咱們想要將目標命令的輸出直接寫入文件而不在終端中顯示,那咱們能夠將 tee
命令結果重定向到 /dev/null
中,好比:
$ df | tee output5.txt > /dev/null
$ cat output5.txt 複製代碼
Output:
在這裏,第一個命令用於將 df
命令的輸出寫入文件 output5.txt 中,同時命令的結果不回顯在終端中。第二個命令用於查看 output5.txt 文件內容 。
你們都學會了嗎?-----------------
我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注個人公衆號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入羣」進入高手如雲技術交流羣。