1. 程式人生 > >良許 | 命令的輸出不會儲存?居然連 tee 命令都不會用!

良許 | 命令的輸出不會儲存?居然連 tee 命令都不會用!

很多情況下,我們需要儲存程式/命令的輸出到本地,常用的一種方法是重定向,這也是一種很好的方法。但有個問題,如果你想要做後續操作,比如要統計輸出的行數等,重定向就有困難了。

這時候,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」獲取最新最全的技術資料,回覆「入群」進入高手如雲技術交流群。

相關推薦

| 命令輸出儲存居然 tee 命令

很多情況下,我們需要儲存程式/命令的輸出到本地,常用的一種方法是重定向,這也是一種很好的方法。但有個問題,如果你想要做後續操作,比如要統計輸出的行數等,重定向就有困難了。 這時候,tee 命令就派上用場啦~ tee 語法格式: $ tee [OPTIONS] [FILE] 這個命令有 4 個主要選項,配合這

將windows命令列的結果儲存到檔案 (cmd命令的重定向輸出)

例如:要將ip查詢結果記錄到檔案中 查詢ip設定:ipconfig/all 重定向操作符:> 要重定向到的檔案:ip.txt C:/>ipconfig/all>ip.txt OK,網路配置被儲存下來了.

檔案搜尋,也自己反省一下?

   有些事情很可笑,可笑得很荒唐。在此記錄一下。當然,這裡並不是貶低、嘲笑,而是說,自己工作出錯了,要知道自己的不足。想提高自己呢就悄悄學習,不想費那個力氣呢就不要覺得自己多牛。     一次安排員工甲,找個軟體查一下目錄中的檔案包含字串。員工甲當然是應付一下,試了一下

黃一老師:懂得轉變固有的思維一生積累你的財富!

  各位朋友大家好,今天我們繼續通往財富自由之路,今天我們講如何成為成功的B和I ,也就是投資人和企業家。小編提了一個觀點,不能一口吃個胖子,要小步前進,積小勝為大勝,雖然從左側象限過度到右側很難,但是行動勝於不行動,害怕失敗拒絕改變,那麼你就永遠不能成功了。   你說馬雲當年設計過今天淘寶的成

恕我直言,你可能 GitHub 搜尋 - 如何精準搜尋的神仙技巧

![](https://upload-images.jianshu.io/upload_images/12890819-3efe8dea94368cd5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 大家好,我是你們的 前端章魚貓,一個不喜歡

廣州為什麽是全球網絡最安全的城市?美國黑客敢碰

俄羅斯 http 學習 曾經 全球 而在 技術分享 信息技術 教父   廣州是全球唯一黑客不敢入侵的地方?世界黑客那麽多,每個行業都有,比如說:黑客恐怖份子襲擊電網系統,可以造成大面積停電。那麽廣州為什麽是全球網絡最安全的城市?原因這裏是中國“黑客”巨頭聚集地,例如知名黑客

難道.NET Core到R2中文編碼支援嗎?

今天寫了一個簡單的.NET Core RC2控制檯程式,發現中文顯示一直是亂碼。檢視作業系統設定,沒有問題;檢視原始檔編碼,也沒有問題;甚至查看了Console字元編碼相關的登錄檔,依然沒有發現問題。難道NET Core到了RC2,莫非連一些常用的編碼都不支援嗎? 現在給大家重現這個問題,通過VS 2015建

Hibernate快取非常煩人,想要最新資料session.clear好使

一、hibernate一級快取 (1)hibernate支援兩個級別的快取,預設只支援一級快取; (2)每個Session內部自帶一個一級快取; (3)某個Session被關閉時,其對應的一級快取自動清除; (4)save、update、saveOrup

真正最正確的BAT執行JAVA顯示DOS視窗(閃一下閃)

今天寫一個獨立於RCP專案之外的SWT小工具,需要用批處理啟動,偶寫了一個批處理沒閃DOS視窗,看得同事一愣一愣的。於是趕快把自己當年一點心得和大家分享下。 很多朋友在WINDOWS下會用批處理去啟動自己的java程式,一般的寫法是執行class:java xx 執行jar:

| 網路檢測神器 ss 命令,你可能根本就

今天我們來介紹一下 Linux ss 命令。 ss 是 Socket Statistics 的縮寫,用來統計 socket 連線的相關資訊,它跟 netstat 差不多,但有著比 netstat 更強大的統計功能,能夠顯示更多更詳細的連線資訊。 剛開始接觸 ss 命令可能會比較困難,我們可通過 ss -h 或

輸入輸出流讀取本機txt文件:能將中文字元流轉化為char 因為char一個位元組,中文在UTF-8的情況下是三個位元組,出現字元流擷取

package interview; import org.junit.Test; import java.io.*; public class TestInOrOutStream { class m { @Test void x(){ Sys

Linux中find命令用法全匯總,看完就沒有

分用 想要 單個 ges 基本上 特定 cda size 以及 Linux 查找命令是Linux系統中最重要和最常用的命令之一。查找用於根據與參數匹配的文件指定的條件來搜索和查找文件和目錄列表的命令。查找可以在各種條件下使用,您可以通過權限,用戶,組,文件類型,日期,大小等

如何將cmd中命令輸出儲存為TXT文字檔案

轉載來自:http://blog.sina.com.cn/zhanghongyas 在使用Windows XP中的cmd.exe工具時,有時候我們想要把我們的輸入命令及結果儲存起來,但是用複製的方法過於麻煩;有時輸出資料條數過大,會造成內容自動滾出螢幕,無法閱讀,我們可將命令執行的結果輸出到文字檔

php上傳檔案時候要是移動到指定目錄是儲存在伺服器上的是嗎

                   我在上傳檔案時候,後臺接收到檔案,但是沒有進行對該檔案的存放做處理,是不是就意味著檔案不會儲存到我的伺服器上任何位置,只是存在記憶體中而已?           

將Crontab中的命令輸出按照當前日期進行儲存

錯誤寫法: 0 2 * * * /usr/bin/php /home/wwwroot/default/monkey/sync_product.php > /home/wwwroot/default/log/monkey_sync_product_$(date +%

ExecuteReader在執行有輸出引數的儲存過程時拿輸出引數

今天一同志問我這個問題,這個是過程還原: 呼叫SQLHelper的時候發現輸出引數沒值了??? 不用sqlhelper也是沒有?神馬情況? 用sqldataadapter卻可以? 嚇死寶寶了,趕緊看看啥情況。先換種方法看看 ,,,我去,可以哇!那麼是不是ExecuteRe

【轉】將cmd中的命令輸出儲存為txt文字檔案

在使用Windows XP中的cmd.exe工具時,有時候我們想要把我們的輸入命令及結果儲存起來,我們可將命令執行的結果輸出到文字檔案。在你輸入的命令後再加上>和你想儲存的檔案地址和名字就可以了。例如:將Ping命令的執行結果輸出到D盤的ping.txt文字檔案。在提示

命令輸出儲存到變數中

轉http://www.linuxidc.com/Linux/2012-09/70738.htm `符號包含的命令執行完後,可以講其輸出結果儲存到變數中 #!/bin/bash   v=`java -version`  echo $v   執行結果: $ ./insta

sqlserver 儲存過程中使用臨時表到底導致重編譯

曾經在網路上看到過,SqlServer的儲存過程中使用臨時表,會導致執行計劃無法重用, 執行時候會導致重編譯的這麼一個說法,自己私底下去做測試的時候,根據profile的跟蹤結果, 如果不是統計資訊變更導致導致的重編譯,單單是使用臨時表,並不會導致重編譯, 但是對於