Shell腳本-tee工具

一、前言

在 Linux/Unix 系統中,tee 是一個非常實用的命令行工具,它可以幫助我們 同時將命令的輸出打印到終端,并寫入文件。這種“雙路輸出”機制在腳本調試、日志記錄、自動化任務中非常有用。

無論是做日志分析、腳本調試,還是編寫部署腳本,tee 都是一個不可或缺的工具。

本文將帶你全面了解 tee 工具的使用方式,包括:

? tee 的基本語法與常用參數
? 如何將命令輸出既顯示又保存
? tee 在 Shell 腳本中的實戰應用
? 與其他文本處理命令的聯合使用
? 實際開發中的常見問題與優化建議

并通過完整的代碼示例幫助你快速上手并熟練掌握 tee 的各種高級用法。

二、什么是 tee?

tee 是一個用于 復制輸入流到多個輸出 的命令行工具。它可以將標準輸入的內容輸出到標準輸出(通常是終端),同時寫入一個或多個文件。

? 典型用途包括:

場景示例
日志記錄將腳本執行過程保存到日志文件
調試輸出查看命令結果的同時保存到文件
自動化部署輸出安裝進度并記錄到日志
權限操作使用?sudo?+?tee?寫入受保護文件

三、tee 基礎語法

command | tee [選項] 文件名

? 常用選項說明:

參數描述
-a?或?--append追加寫入文件,而不是覆蓋
-i?或?--ignore-interrupts忽略中斷信號(如 Ctrl+C)
-p如果管道寫入失敗,不退出程序(默認會退出)
--help顯示幫助信息
--version顯示版本信息

四、tee 使用示例

? 示例1:基礎使用 —— 同時輸出到終端和文件

echo "Hello, World!" | tee output.txt

終端輸出:

Hello, World!

同時 output.txt 文件中也寫入了該內容。

? 示例2:追加寫入(-a

echo "Line 1" > output.txt
echo "Line 2" | tee -a output.txt

此時 output.txt 內容為:

Line 1
Line 2

? 示例3:同時寫入多個文件

echo "Data to log" | tee file1.log file2.log

file1.logfile2.log 都會被寫入 "Data to log"

? 示例4:忽略中斷信號(-i

ping www.baidu.com | tee -i ping.log

即使按下 Ctrl+C,tee 也不會立即終止,而是繼續寫入最后一段數據。

五、tee 在 Shell 腳本中的應用

? 示例1:記錄腳本運行日志

#!/bin/bash
exec > >(tee -a script.log) 2>&1
echo "腳本開始執行..."
sleep 2
echo "正在處理任務..."
echo "腳本執行完成。"

此腳本的所有輸出都會顯示在終端,并寫入 script.log 文件。

? 示例2:權限提升后寫入文件(結合?sudo

echo "new content" | sudo tee /etc/myconfig.conf

即使 /etc/myconfig.conf 沒有寫權限,也可以通過 sudo tee 成功寫入。

? 示例3:調試腳本時查看中間結果

ls -la /var/log/ | tee debug_output.txt | grep error

你可以看到中間的 ls 結果,同時也能進行后續 grep 過濾。

六、tee 與其他命令的配合使用

? 示例1:結合?grep?過濾并記錄日志

dmesg | grep "error" | tee error_log.txt

輸出所有錯誤信息到終端,并保存到 error_log.txt

? 示例2:結合?awk?提取字段并保存

ps aux | awk '{print $1, $2}' | tee process_info.txt

提取進程用戶和 PID 并保存。

? 示例3:結合?curl?下載并顯示進度

curl -s https://example.com/data.json | tee data.json | jq .

下載 JSON 文件并實時顯示其內容(通過 jq 解析)。

七、tee 使用技巧總結

技巧說明
? 使用?-a?追加寫入避免覆蓋已有日志
? 多文件寫入可以一次寫入多個目標文件
? 結合?exec?記錄整個腳本輸出適用于調試和審計
? 與?sudo?配合寫入只讀文件替代?echo > /path/to/file?的權限問題
? 忽略中斷信號(-i防止意外中斷導致數據丟失
? 結合?pipe?管道鏈式調用實現復雜數據流處理

八、tee 實戰案例匯總

? 案例1:記錄編譯日志

make all 2>&1 | tee build.log

編譯過程中實時查看輸出,并保存完整日志。

? 案例2:自動備份配置文件并修改

cat /etc/ssh/sshd_config | tee sshd_config.bak | sed 's/PasswordAuthentication no/PasswordAuthentication yes/' | sudo tee /etc/ssh/sshd_config

先備份原配置,再修改并寫回。

? 案例3:監控網絡請求并記錄響應

curl -s http://api.example.com/status | tee response.log | jq .

查看 API 返回值并保存原始數據。

九、常見問題與解決方法

問題原因解決方案
文件未被寫入權限不足使用?sudo tee
內容被覆蓋而非追加未使用?-a添加?-a?參數
輸出亂碼或編碼異常編碼不一致設置?LANG=C?或使用?iconv?轉換
tee?退出太快被中斷信號終止使用?-i?忽略中斷
輸出順序混亂多線程或異步輸出使用?script?或重定向統一處理

十、總結對比表:tee 常用參數一覽

參數功能
-a追加寫入文件
-i忽略中斷信號
-p出錯時不退出
--help顯示幫助信息
--version顯示版本信息

十一、結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915342.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915342.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

走進Linux的世界:Linux基本指令(三)

嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的pa…

跨域詳解與解決方案:從理論到實踐的全面指南

目錄 1. 跨域是什么?為什么它讓人頭禿? 為什么跨域問題讓人抓狂? 跨域的本質 2. 跨域的罪魁禍首:同源策略與CORS 同源策略的來龍去脈 CORS:跨域的“通行證” 3. JSONP:古老但依然有用的跨域“黑科技” JSONP的原理 JSONP的優缺點 4. 代理服務器:跨域的“中間人…

深入詳解:決策樹在輔助診斷系統與臨床決策支持中的應用及實現細節

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#,Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

【詳細筆記】兩類曲線積分轉換

文章目錄參考教程一兩類曲線積分的聯系參數方程曲線的切線方向余弦參考教程2兩類曲線積分之間的關系物理意義解釋證明思路參考教程一 3分鐘幫你搞定兩類曲線積分之間的聯系(弧長和坐標) 兩類曲線積分的聯系 設平面曲線LLL上的第二類曲線積分∫LPdxQdy…

【成品設計】基于STM32F429的云端電子相冊

V1《基于STM32F429的云端電子相冊》 V1硬件框圖:V1功能說明: 支持 softAP 配網。支持 HTTPS 客戶端的 GET\POST 請求支持文件系統用于圖片的存儲。支持 LVGL 自定義 GUI。日歷功能。STM32F429文件系統LVGLRGB LCD屏幕。屏幕尺寸480*480. 首次開機交互&am…

網絡安全隔離技術解析:從網閘到光閘的進化之路

目錄 一、網絡安全隔離技術體系 1.1 網絡安全隔離技術發展歷程 1.2 隔離技術分類矩陣 1.3 核心隔離原理對比 二、網閘技術深度解析 2.1 GAP架構剖析(Guarded Access Point System 安全隔離與信息交換系統) 2.2 技術演進路線 三、光閘技術突破創新…

初識 二叉樹

目錄樹什么是二叉樹二叉樹的五種狀態滿二叉樹完全二叉樹二叉排序樹平衡二叉樹二叉樹的遍歷B3642 二叉樹的遍歷P1305 新二叉樹二叉樹的深度P4913 【深基16.例3】二叉樹深度相關例題訓練:二叉樹問題樹 這是樹(拍攝于鄭州輕工業大學,第一次鄭州輕…

(1)Windows環境下安裝Oracle

概述:Oracle數據庫是一種網絡上的數據庫, 它在網絡上支持多用戶, 支持服務器/客戶機等部署(或配置)。服務器與客戶機是軟件概念:它們與計算機硬件不存在一一對應的關系. 即:同一臺計算機既可以充當服務器又可以充當客戶機,或者一臺計算機只充當服務器或只…

工業數據集成中間件工具OPC Router詳細介紹

一、產品概述 OPC Router 是 Software Toolbox 旗下的一款面向工業數據集成與自動化的數據中間件工具,專注于實現各類工業系統之間的數據交互和自動化流程編排。它通過模塊化的插件機制,打通 PLC、ERP、MES、數據庫、MQTT、REST API 等不同系統之間的數…

消息隊列 2.RabbitMQ的基本概念與使用

RabbitMQ 是一款基于 AMQP(Advanced Message Queuing Protocol)協議的開源消息中間件,主要用于實現分布式系統中的消息傳遞,支持異步通信、系統解耦、流量削峰等場景。在 Java 生態中,RabbitMQ 被廣泛應用,…

【web安全】SQL注入與認證繞過

目錄 一、SQL注入漏洞 1.1 基礎注入原理 1.2 實用注入Payload分類 邏輯繞過型 注釋截斷型 聯合查詢型 常見的萬能密碼-CSDN博客 二、登錄繞過實戰技巧 2.1 基礎繞過手法 2.2 高級繞過技巧 編碼繞過 多重注釋 參數污染 三、密碼重置漏洞利用 3.1 常見漏洞模式 3…

Python適配器模式詳解:讓不兼容的接口協同工作

一、模式定義與核心思想 適配器模式(Adapter Pattern) 是一種結構型設計模式,它通過創建一個中間層(適配器),將不兼容的接口轉換為客戶端期望的接口。就像現實中的電源適配器,讓不同國家的插頭…

微信小程序列表數據上拉加載,下拉刷新

1.上拉加載數據,數據 下一頁數據 前面的數據([...this.data.list, ...data.records)2.當用戶上拉加載過快時,會不停的調用接口,需要節流閥isLoading3.上拉加載到最后一頁的判斷,isFinish// pages/list.js…

【樹上倍增 LCA DFS 前綴和】P10391 [藍橋杯 2024 省 A] 零食采購|普及+

本文涉及知識點 C算法:前綴和、前綴乘積、前綴異或的原理、源碼及測試用例 包括課程視頻 CDFS 樹上倍增 LCA P10391 [藍橋杯 2024 省 A] 零食采購 題目描述 小藍準備去星際旅行,出發前想在本星系采購一些零食,星系內有 nnn 顆星球&#x…

PDF發票批量打印工具哪個好?高效打印發票的實用工具推薦

開小超市這幾年,每月要打幾十張進貨發票做賬,以前打印時總犯愁:有的發票 PDF 太大,打出來字小得看不清;有的又太窄,白白浪費半張紙。試過手動調整,每張都要改縮放比例,累不說&#x…

4G模塊 A7680通過MQTT協議連接到華為云

命令說明 基礎AT指令 ATi顯示產品的標志信息 ATCIMI查詢IMSI ATCICCID從SIM卡讀取ICCID ATCGSN查詢產品序列號 ATCPIN查詢卡狀態 ATCSQ查詢信號強度 ATCGATT查詢當前PS域狀態 ATCREG查詢GPRS注冊狀態 ATCEREG查詢4G注冊狀態 ATCGPADDR查詢PDP地址 ATCMGF選擇短信格式 ATCMGS發…

大模型詞表設計與作用解析

幾乎所有大型語言模型(LLM)都有自己獨立的詞表(Vocabulary)。這是模型設計和訓練過程中的核心組件之一。以下是關于詞表的關鍵點: 1. 詞表的作用 分詞基礎:詞表定義了模型如何將輸入文本拆分成基本單元&…

(一)Eshop(異常處理中間件/grpc)

文章目錄項目地址一、異常處理1.1 自定異常1.2 自定義異常處理中間件1.3 注冊中間件二、grpc服務2.1 創建protos1. 打折的protos2. 設置grpc server3. program配置服務4. docker-compose2.2 CRUD1. 查詢2.3 測試1. 發起查詢請求三、grpc服務消費3.1 創建client1. 添加服務2. 選…

BLIP、InternVL Series(下)

目錄 一、InternVL1.5 1、改進 二、InternVL2 1、漸進式擴展 2、多模態擴展 三、InternVL2.5 1、方法 2、數據優化 四、InternVL3 2、方法 3、訓練后處理 4、測試時擴展 五、BLIP-3o 一、InternVL1.5 1、改進 InternVL1.5在InternVL基礎上,優化了QLLa…

【數據結構】二維差分數組

題目鏈接 【模板】二維差分_牛客題霸_牛客網 牛客網 - 找工作神器|筆試題庫|面試經驗|實習招聘內推,求職就業一站解決_牛客網 描述 給定一個 nmnm 的整數矩陣 bb,矩陣的下標從 11 開始記作 bi,jbi,j?。現在需要支持 qq 次操作,第 tt 次…