前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(18)Bash输入输出重定向

(18)Bash输入输出重定向

作者头像
生信real
发布2020-08-26 18:17:32
1.1K0
发布2020-08-26 18:17:32
举报
文章被收录于专栏:Linux基础入门

在介绍输入输出重定向前,我们需要知道什么是标准输入和输出

1.标准输入输出

设备

设备文件名

文件描述符

类型

键盘

/dev/stdin

0

标准输入

显示器

/dev/sdtout

1

标准输出

显示器

/dev/sdterr

2

标准错误输出

下面我们来看一下什么是输出重定向

从字面意义上我们可以这样理解:输出本来是当我进行命令后,输出到屏幕上,现在我不让他输出到屏幕,改变他的输出方向,把他输出到文件当中,就叫输出重定向。

2.输出重定向

类型

符号

作用

标准输出重定向

命令 > 文件

以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。

命令 >> 文件

以追加的方式,把命令的 正确输出输出到指定的文件或设备当中。

标准错误输出重定向

错误命令 2> 文件

以覆盖的方式,把命令的 错误输出输出到指定的文件或设备当中。

错误命令 2>> 文件

以追加的方式,把命令的错误输出输出到指定的文件或设备当中。

例1.标准输出重定向

代码语言:javascript
复制
#ls命令查看目录内的内容为aaa、bbb、ccc
[root@192 lhh98330]# ls
aaa bbb ccc
#输出重定向,将ls内容输出到newfile这个文件中,不再显示在屏幕上
[root@192 lhh98330]# ls > newfile 
#再次通过ls命令查看目录内的内容
[root@192 lhh98330]# ls
newfile aaa bbb ccc
#通过cat命令查看newfile内容,和ls中的一致
[root@192 lhh98330]# cat newfile
newfile
aaa
bbb
ccc
#将date命令重定向在newfile文件中
[root@192 lhh98330]#date > newfile
#通过cat命令查看newfile内容
#发现date命令覆盖了ls的内容
[root@192 lhh98330]#cat newfile
2020年 08月 11日 星期二 10:19:42 CST
#">"为覆盖重定向,">>"则为追加重定向,
#用">>"再次将date写入newfile
#不会覆盖之前的date,会出现两条date内容
[root@192 lhh98330]#date >> newfile
2020年 08月 11日 星期二 10:19:42 CST
2020年 08月 11日 星期二 10:20:33 CST

例2.错误输出重定向

代码语言:javascript
复制
#输入一条不存在的命令lst,执行结果会报错
[root@192 lhh98330]#lst
bash: lst: 未找到命令...
#如果用输出重定向,错误结果是保存不了的
[root@192 lhh98330]#lst >> newfile
bash: lst: 未找到命令...
#错误输出需要用错误输出重定向
#将lst内容输出到newfile这个文件中,不再显示在屏幕上
[root@192 lhh98330]#lst 2>> newfile
#通过cat命令查看newfile内容,错误输出结果包含在内
[root@192 lhh98330]#cat newfile
2020年 08月 11日 星期二 10:19:42 CST
2020年 08月 11日 星期二 10:20:33 CST
bash: lst: 未找到命令...

等等……错误输出重定向,需要我们提前知道命令是正确的还是错误的,如果我知道这个命令是错的,我把他改正不就行了吗?还输出他干嘛……

所以像这种正确输出和错误输出分别保存的方法在实际中用处不大,我们用到更多的是正确输出和错误输出同时保存

3.正确输出和错误输出同时保存

正确输出和错误输出同时保存

命令 > 文件 2>&1

以覆盖的方式,把正确输 出和错误输出都保存到同 一个文件当中。

命令 &>文件

命令 >> 文件 2>&1

以追加的方式,把正确输出和错误输出都保存到同一个文件当中。

命令 &>>文件

命令 >> 文件1 2>>文件2

把正确的输出追加到文件1中,把错误的输出追加到文件2中

例1:正确输出和错误输出同时保存

代码语言:javascript
复制
#不管错误输出还是正确输出都保存在同一文件里
[root@192 lhh98330]#date &>> file
[root@192 lhh98330]#lst &>> file
[root@192 lhh98330]#cat file
2020年 08月 11日 星期二 14:55:42 CST
bash: lst: 未找到命令...
#把正确的输出追加到文件1中,把错误的输出追加到文件2中
[root@192 lhh98330]#date >> file1 2>> file2
#正确输出保存在file1中
[root@192 lhh98330]#cat file1
2020年 08月 11日 星期二 14:56:42 CST
#因为date为正确输出,所以file2为空
[root@192 lhh98330]#cat file2 

PS:命令 &>/dev/null:不管命令是否正确,直接丢入这个文件,不保存任何数据,在写shell脚本时有用,比如说我们在写Shell脚本的时候,有些命令行在Shell执行的时候他会有一些输出,这个输出对于我们整个脚本没有任何意义,但是他的命令格式本身就会输出,这个时候就可以用这个方式把他丢到垃圾箱。

4.输入重定向

我们执行命令的参数应该是键盘来输入,我改变他的输入方向,不再以键盘来输入,而是以文件来输入。

格式:命令<文件,把文件作为命令的输入

代码语言:javascript
复制
[root@192 lhh98330]#wc [选项] [文件名]
选项: -c 统计字节数
      -w 统计单词数
      -l 统计行数

例1.把文件newfile作为命令wc的输入

代码语言:javascript
复制
[root@192 lhh98330]# wc < newfile
8 8 45   #8行,8个单词,45个字符(包含回车符)

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信real 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档