Linux shell编程学习笔记84:tee命令——显示保存两不误

0 引言

在前面的学习笔记中,我们经常使用echo命令和输出重定向来生成脚本文件或演示文件,其实Linux提供了一个可以从标准输入读取数据,并输出成文件的命令——tee。

1 tee命令 的帮助信息、功能、命令格式、选项和参数说明

1.1 tee命令 的帮助信息

我们可以输入命令 tee --help 来查看tee命令的帮助信息。

[purpleendurer @ bash ~] tee --help
Usage: tee [OPTION]... [FILE]...
Copy standard input to each FILE, and also to standard output.-a, --append              append to the given FILEs, do not overwrite-i, --ignore-interrupts   ignore interrupt signals--help     display this help and exit--version  output version information and exitIf a FILE is -, copy again to standard output.GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report tee translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'tee invocation'
[purpleendurer @ bash ~] 

1.2 tee命令 的功能

tee 是一个简单的命令行实用程序,它接受输入并将输出写入文件和标准输出(即终端)。

tee命令和输出重定向都可以把输出内容保存到文件,但两者仍然存在差别:

输出重定向只能保存到1个文件,

tee允许我们把标准想要将输出重定向到多个文件。

Tee 命令是 GNU coreutils 的一部分,因此它预装在所有 Linux 发行版中。

1.3 tee命令 命令格式

tee [选项]... [文件]...

1.4 tee命令 选项说明

选项说明
-a, --append附加到给定的 FILE,不覆盖
-i, --ignore-interrupts忽略中断信号
--help显示此帮助并退出
--version输出版本信息并退出

1.5 tee命令 参数说明 

文件:将标准输入保存到的文件名

2 tee命令使用实例

2.1 将标准输入内容保存到多个文件

例如,将标准输入内容"I am purpleendurer"保存到文件 t1 和 t2的命令是:

tee t1 t2

[purpleendurer @ bash ~] tee t1 t2
I am purpleendurer
I am purpleendurer
[purpleendurer @ bash ~] ls
Code  t1  t2
[purpleendurer @ bash ~] cat t1
I am purpleendurer
[purpleendurer @ bash ~] cat t2
I am purpleendurer
[purpleendurer @ bash ~] 

我们通过标准输入设备键盘输入 I am purpleendurer 回车并按Ctr+D保存

tee命令默认将标准输入的内容输出到标准输出设备,所以我们会看到两行 I am purpleendurer

随后我们使用ls命令查看当看目录,发现了新创建的文件t1和t2

接着我们使用cat命令查看文件t1和t2的内容,两个文件的内容都是我们刚才输入的  I am purpleendurer

2.2 将标准输入内容追加保存到多个文件,并且不将输入内容显示在标准输出设备上

我们仍然以文件t1和t2为例。

[purpleendurer @ bash ~] cat t1 t2
I am purplendurer
I am purplendurer
[purpleendurer @ bash ~] tee -a t1 t2  > /dev/null
Linux is good.
[purpleendurer @ bash ~] cat t1
I am purplendurer
Linux is good.
[purpleendurer @ bash ~] cat t2
I am purplendurer
Linux is good.
[purpleendurer @ bash ~] 

2.2.1 首先,我们使用cat命令查看文件t1和t2的内容,两个文件的内容都是:

 I am purpleendurer

2.2.2 然后,我们使用命令带-a选项的tee命令

tee -a t1 t2  > /dev/null

将标准输入内容追加到文件t1 和 t2,并使用了

> /dev/null

将标准输出重定向到 /dev/null,这样tee命令就不会把输入的内容输出到标准输出设备上。

2.2.3 接着,我们输入:Linux is good 回车并按Ctrl+D保存。

2.2.4 最后,我们使用cat命令查看文件t1和t2的内容,两个文件的内容都是:

 I am purpleendurer

Linux is good.

2.3 与echo命令和管道操作配合使用

[purpleendurer @ bash ~] echo Hello world | tee t3 t4
Hello world
[purpleendurer @ bash ~] cat t3 t4
Hello world
Hello world
[purpleendurer @ bash ~] 

我们使用echo命令输出字符串Hello world,字符串Hello world经过管道输入到tee 命令,被tee 命令存入文件t3和t4。

使用cat命令查看文件t1和t2的内容,两个文件的内容都是字符串Hello world

所以命令

 echo Hello world | tee t3 t4

相当于两条命令

 echo Hello world > t3

 echo Hello world >  t4

通过管道操作,tee命令不会回显输入的字符串Hello world

2.4 将出错信息保存到文件

[purpleendurer @ bash ~] ifconfig | tee i
bash: ifconfig: command not found
[purpleendurer @ bash ~] cat i
[purpleendurer @ bash ~] ifconfig 2>&1 | tee i
bash: ifconfig: command not found
[purpleendurer @ bash ~] cat i
bash: ifconfig: command not found
[purpleendurer @ bash ~] 

管道操作一般转发标准输出信息(1),不转发命令执行时反馈的出错信息(2)。

如果我们想将命令执行时反馈的出错信息也存储下来,可以使用l输出重定向

2>&1

将出错信息重定向到标准输出。其中1代表标准畀出,2代表出错信息。

在上面的例子里,命令

ifconfig

没有标准出错,只有出错信息:

bash: ifconfig: command not found

 所以命令

ifconfig | tee i

中 没有信息通过管道输入给命令tee,也就没有信息存储到文件i

所以我们使用cat命令查看文件i是没有内容的。

当我们在ifconfig命令后面增加了 2>&1,命令变成

ifconfig 2>&1 | tee i

ifconfig命令的出错信息被重定向到标准输入,通过管道传输给tee命令并保存到文件1中。

这里我们使用cat命令查看文件i的内容,就是:

bash: ifconfig: command not found

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552205.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题|983. 最低票价|动态规划、记忆化递归

本题求解最小值&#xff0c;思路是动态规划&#xff0c;但是遇到的问题是&#xff1a;动态规划更新的顺序和步长&#xff0c;以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天&#xff08;可能不在需要出行的天数里&#xff09;&#xff0c;需要花费…

HTML的修饰(CSS) -- 第三课

文章目录 前言一、CSS是什么&#xff1f;二、使用方式1. 基本语法2. 引入方式1.行内式2.内嵌式3. 链入式 3. 选择器1. 标签选择器2.类选择器3. id选择器4. 通配符选择器 4. css属性1. 文本样式属性2. 文本外观属性 5. 元素类型及其转换1. 元素的类型2. 元素的转换 6.css高级特性…

基于SpringBoot+Vue的驾校官网

一、项目介绍 > 这是一个基于SpringBootVueElementPlus开发的驾校官网。 > 包括用户登录注册、在线学习、模拟考试、预约学车、在线咨询等功能。 > 该项目适用于JAVA初学者的学习项目或毕业课程设计。 二、基础依赖 技术/框架版本描述Java8编程语言Maven3.6依赖…

拥抱可持续创新,数据驱动未来——The Open Group 2024生态系统架构·可持续发展年度大会盛情邀约

随着全球数字化浪潮的持续推进和可持续发展理念的深入人心&#xff0c;企业正面临前所未有的机遇与挑战。如何在保障安全的前提下&#xff0c;实现数据驱动的业务增长与降本增效&#xff0c;已经成为企业数字化转型的核心课题。为此&#xff0c;The Open Group 2024生态系统架构…

领域偏移:协变量移位下的域自适应

现在我们将焦点转移到一种叫做协变量转移的扰动上。我们在一个分类或回归设置中工作&#xff0c;我们希望从x预测y&#xff0c;并假设p≈(y | x)和p∗(y | x)是相同的(标记函数在训练和测试之间不会改变) 假设 (Covariate Shift)。对于列车分布p~和检验分布p∗&#xff0c;我们…

七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)

七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#xff08;实操详细使用&#xff09; 文章目录 七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#…

【卡尔曼滤波】 Kalman Filter 原理详解与公式推导

【卡尔曼滤波】 Kalman Filter 原理详解与公式推导 前言引例&#xff1a;什么是卡尔曼滤波&#xff1f;图解卡尔曼滤波引入从宏观上理解卡尔曼融合从微观上理解状态矩阵先验状态矩阵观测状态矩阵 卡尔曼滤波公式理解参数说明预测阶段&#xff08;Prediction&#xff09;更新阶段…

生信初学者教程(二十):免疫浸润分析

文章目录 介绍加载R包导入数据所需函数堆积图箱线图热图相关性矩阵图输出结果总结介绍 在本章节中,将详细探讨免疫细胞的组成结构、其在不同个体和分组之间的相对丰度差异,并通过热图等可视化手段,对这些差异进行直观而深入的解析。这些分析将有助于科研人员更好地理解免疫细…

L0-Linux-关卡材料提交

SSH全称Secure Shell&#xff0c;中文翻译为安全外壳&#xff0c;它是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证&#xff0c;在不安全的网络环境中提供了安全的网络服务。 SSH 是&#xff08;C/S…

IDE 使用技巧与插件推荐全面指南

目录 目录 常用IDE概述 Visual Studio Visual Studio Code IntelliJ IDEA PyCharm Eclipse IDE 使用技巧 通用技巧 Visual Studio 专属技巧 Visual Studio Code 专属技巧 IntelliJ IDEA 专属技巧 插件推荐 Visual Studio 插件 Visual Studio Code 插件 IntelliJ…

《如何高效学习》

有道云笔记 第一部分 整体性学习策略 结构 结构就像思想中的一座城市&#xff0c;有很多建筑物&#xff0c;建筑物之间有道路相连&#xff0c;有高大而重要的与其他建筑有上百条路相连&#xff0c;无关紧要的建筑只有少数泥泞的小道与外界相通。 建立良好的知识结构就是绘制…

掌握这12招,ChatGPT秒变你的高效神器!

近期&#xff0c;围绕ChatGPT和人工智能的讨论热度有所减退&#xff0c;OpenAI的更新频率也显著降低。在此阶段&#xff0c;我们可以沉下心来&#xff0c;进行总结与反思&#xff0c;无需担心错失热点&#xff0c;而应专注于更有效地将AI整合进我们的工作流。 背景&#xff1a;…

2024/10/1 操作系统大题专训之文件

2022&#xff1a; 2018&#xff1a; 2016&#xff1a; 2014&#xff1a; 2012&#xff1a; 2011&#xff1a;

postgresql僵尸进程的处理思路

简介 僵尸进程&#xff08;zombie process&#xff09;是指一个已经终止但仍然在进程表中保留条目的进程。正常情况下&#xff0c;当一个进程完成执行并退出时&#xff0c;操作系统会通过父进程调用的wait()或waitpid()系统调用来收集该子进程的退出状态。如果父进程未及时调用…

DICOM文件的格式详细解说(1)

1 DICOM的详细介绍 DICOM要到这里面看Current Edition&#xff0c;这是标准委员会制定的标准&#xff0c;同时也在与时俱进&#xff0c;不断的进行新的数据格式更新。 2 DICOM的格式 图1 DICOM文件格式的图示 要先说一下数据结构&#xff0c;我们被最多影响的是数据结构和算…

Trilium Notes笔记本地化部署与简单使用指南打造个人知识库

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

贝励德故事:注册电气工程师有多难考?(知乎)

之所以说是条不归路&#xff0c;给你看看我的复习资料就知道了 这是需要买的手册和规范&#xff0c;加起来有五十斤重了。你还得在三小时内找到知识点结合题意计算作答&#xff0c;计算器不能出一点差错。这个难度可想而知。 这是我备考两年多做过的题&#xff0c;看过的总结&a…

Spring Boot框架下的足球青训俱乐部管理

2 相关技术简介 2.1 Java技术 Java是一门伟大的纯面向对象的编程语言和编程语言。同时&#xff0c;它还是Java语言从嵌入式开发到企业级开发的平台。Java凭借其一次编译&#xff0c;任何地方执行的优点&#xff0c;使得盛行的web应用程序有大量的Java编译&#xff0c;很好地支…

AMD CDNA™2 GPU 中的寄存器压力

Register pressure in AMD CDNA™2 GPUs — ROCm Blogs 注意&#xff1a; 此博客以前是 AMD实验室笔记 博客系列的一部分。 GPU kernel 中的寄存器压力对高性能计算 (HPC) 应用程序的整体性能有着巨大的影响。理解和控制寄存器的使用可以让开发者精心设计代码&#xff0c;以最…

jQuery——元素尺寸

1、内容尺寸 height&#xff08;&#xff09;&#xff1a;height width&#xff08;&#xff09;&#xff1a;width 2.内部尺寸 innerHeight&#xff08;&#xff09;&#xff1a;height padding innerWidth&#xff08;&#xff09;&#xff1a;width padding 3、外部尺寸…