tee用于把命令结果打印在屏幕上并同时保存到文件。
创新互联主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务伊川,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
tee用法
描述:从标准输入中读取并同时写入到标准输出和指定的文件上
选项:
-a,--append:不覆盖,而是追加输出到指定的文件中
-i,--ignore-interrupts:忽略中断信息
若指定的输出文件为'-',则再次输出到标准输出上
实例:
tee Example.txt #将标准输入中输入的内容同时输出到Example.txt和标准输出上
实践:
例如 ifconfig | tee ifconfig.log
查看iconfig.log
注:
标准输入一般有键盘和其它文件,标准输出有屏幕等。tee只能进行标准输入的输出,对于错误输入是不能输出的。
在调试脚本时,想要每个命令的执行过程都输出到屏幕或者文件中,以便后续查看,如何操作呢?首先脚本第一行要写为“#!/bin/bash -x”,这样会把每个命令的执行记录都输出到屏幕,若还要输出到指定文件,要用到tee,但tee只能进行标准输入,对于标准输入和错误输入要用到下式:
./filename.sh 21 | tee output.log 或者直接 bash -x ./filename.sh 21 | tee output.log
今天调试一个bash,要把屏幕的输出结果存到log文件中,开始输入$bash -x ./test.sh log 结果发现log里只存放了程序的执行结果,后来在cu的一篇帖子里?tid=264380highlight=bash得到了启发,bash -x的调试信息是输出到2号流中的,所以解决方案为bash -x ./test.sh 21 | tee log 想起以前要存放执行make的结果时也遇到类似问题,总结如下:
1、管道符的“I”的作用只是把前一个程序的标准输出流(stdout)的数据作为后一个程序的标准输入流stdin的数据,如不进行重定向,则其他输出流的信息是无法传给后面的程序的
2、屏幕得到的信息不一定是从程序的标准输出来的,也包括标准错误输出流stderr中的信息
3、有些程序(特别是象bash、make这样执行了其他程序的程序)的设计者为了省事,把一些正常情况的信息也放在stderr中输出(即使程序本身并无错误),而stdout用来输出被调用程序的执行时信息,造成了用户的误解简单编写了一下脚本,通过ssh登陆在命令行下运行正常,可是将脚本添加到crontab中就不正常。想记录一下输出信息,分析一下错误原因。将脚本通过使用info.log 重定向输出,结果发现一些在命令行下可以看到的文本信息没有记录到info.log文件中,研究了一下,那些输出估计是输出到了标准错误上。
研究了一下通常添加命令后面几个输出含义
■ /dev/null 输出到空设备,表示丢掉输出信息。
■ 21将输出到标准错误的信息输出到标准输出设备(通常是屏幕)有3个默认的i/o,
■ 0是标准输入,一般是键盘
■ 1是标准输出,一般是屏幕
■ 2是标准错误,有时候屏幕上可以看到,但是重定向的文件中看不到的就是它了
题主你好,
tee最常用法说白了就是将命令的输出内容输出到终端的同时,还可以将其写入文件.
*.再换句话说就是,我们想要将命令的结果a.打印到终端上让我们看到的同时,还想要将这部分内容b.存到文件中,如果有这个需求,可以使用tee命令.
-----
通常的用法:
命令1 | tee filename //将命令1的结果会被打印到终端的同时,还会在filename中存一份
*.上面用法中,加粗的| tee表示是固定不变的,剩下的命令1和filename是可变的
-----
举个最简单的例子,我们的需求: 将"你好,朋友"打印到终端,并且将其另存到文件friend中.
echo "你好,朋友"
如果光是这样写,则只是将"你好,朋友"输出到了终端上,并没有另存的意思,所以我们引入tee:
echo "你好,朋友" | tee friend
也就是说echo命令把结果,"你好,朋友",传给了命令tee, 而tee做的就是把echo命令传过来的结果给复制一份,一份输出到终端,一份保存到文件friend中.
-----
再啰嗦一句,上面这条命令的处理流程:
echo "你好,朋友" | tee friend--先将echo命令的结果, "你好,朋友" ,通过管道 ,|, 送给tee命令, tee命令将echo命令传过来的结果, "你好,朋友" ,又复制了一份,此时共有两份了,将其中一份显示到终端上; 另一份保存到文件friend中.
-----
测试截图:
第一条命令: 可以看出我当前目录下没有任何文件;
第二条命令: 当该命令执行完,我们看到 "你好,朋友" 被输出到了终端上;
第三条命令: 同时,我们可以看到还在终端下得到了一个名为friend的文件,内容同终端上输出的相同.
注意事项: 此时tee将结果写到friend文件中用的是 覆盖,而非追加, 也就是说我们多次执行这条命令后,friend这个文件中只存在一行 "你好,朋友", 如果我们想要将结果追加到文件friend中,则要给tee加个-a参数,即命令为:
echo "你好,朋友" | tee -a friend
看测试截图:
该截图做了个对比:
上面的就是没有加-a参数的,可以看到命令两次执行完后,friend文件中就只有一行"你好,朋友";
中间我们使用了rm friend将friend文件删掉了,防止产生干扰;
下面两句加了-a参数,可以看到命令两次执行后,friend文件中有两行"你好,朋友".
写在最后: 上面只是描述了tee的常规用法,描述有不到位的地方.对于使用场景现在只能是抽象的说:你一边想要在终端上看到命令产生的结果,又想将该结果保存到文件中供后面查看.
另外, 上面只是tee命令比较常见的用法,并不是其全部的功能.
=====
希望可以帮到题主, 欢迎追问.
Linux 终端中命令输出保存到文件中的方法
当你在 Linux 终端中运行命令或脚本时,它会在终端中打印输出方便你立即查看。
有时你需要将输出保存到文件中以备将来参考。当然你可以在 Linux 终端中复制和粘贴,但是有更好的方法可以在 Linux 命令行中保存 shell 脚本或命令的输出,让我演示给你看。
方法 1:使用重定向将命令输出保存到文件中
你可以在 Linux 中使用重定向来达成目的。使用重定向操作符,它会将输出保存到文件中而不是在屏幕上显示。
会将命令输出重定向到文件,它会替换文件中的所有内容。
会将命令输出添加到文件现有内容的末尾。
使用标准输出重定向运算符将输出重定向到文件:
command file.txt
如果file.txt不存在,它会自动创建。如果你使用再次重定向到相同的文件,文件内容将被替换为新的输出。
下面的示例将更好地演示它。它首先会保存ls -l命令的输出,然后,它将用ls *.c命令的输出替换文件的内容。
2ce1818eb3591da31c059454011534ed.png
如果你不想在保存脚本或命令的输出时丢失现有文件的内容,可以使用:
command file.txt
下面这个例子更好地展示了它:
43e90d2b725aae0cdbdb9049c5f6b090.png
即使文件不存在,它也会自动创建。
温馨提示:将 Linux 命令输出和错误保存到一个文件中。
如果 Linux 命令返回错误,那么错误不会保存在文件中。你可以使用21将命令的输出和错误保存到同一个文件中,如下所示:
command file.txt 21
通常,0代表标准输入,1代表标准输出,2代表标准错误。在这里,你要将标准错误(2) 重定向()到与标准输出(1)相同的地址。
方法 2:使用 tee 命令显示输出并将其保存到文件中
顺便说一句,你是否注意到,当你将命令输出发送到一个文件时,你再也无法在终端上看到它了?Linux 的 tee 命令解决了这个问题。
类似于将水流发送到两个方向的三通管,tee命令将输出发送到终端以及文件(或作为另一个命令的输入)。你可以像这样使用它:
command | tee file.txt
同样,如果该文件不存在,它将自动创建。
你还可以使用tee命令-a选项进入附加模式:
command | tee -a file.txt
让我用一些简单的例子来演示:
e1bbfd365befcb505d74731451e444ec.png
我在例子中使用了简单的 Linux 命令。但是请放心,你也可以使用这些方法来保存 bash 脚本的输出。
注意:将命令输出保存到文件时,避免管道陷阱
你可能对管道重定向很熟悉,可以使用它来组合 Linux 命令,但不能将输出通过管道传输到文件,它显示找不到output.txt命令:
0e3777ef009dabd7aa9a53768b8c7316.png
这是因为管道将一个命令的输出重定向到另一个命令的输入。在本例中,你向它传递一个了一个文件名而它期望一个命令。
如果你是一个 Linux 命令行新手,我希望这个快速教程对你的 Linux 知识有所帮助。I/O 重定向是一个需要注意的基本概念。
一如既往,欢迎提出问题和建议。
到此这篇关于如何将 Linux 终端中命令的输出保存到文件中实例操作的文章就介绍到这了,更多相关Linux 终端命令输出保存文件中内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。