shell 脚本命令 : 重定向

7 篇文章 1 订阅
2 篇文章 0 订阅

最近在看shell 脚本命令 : 重定向 :即重新改变输入输出的来源

希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可

希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可

  • echo “字符串” > test.txt

  • echo “字符串” | tee test.txt

Shell允许打开至多10个文件,文件描述符从0,1,2,…,9

  • 文件描述符0,表示标准输入
  • 文件描述符1,表示标准输出
  • 文件描述符2,表示标准错误输出

在当前路径下 执行.sh 文件
./test.sh
如果没有其权限: chmod+x[] c h m o d + x [ 文 件 路 径 ] 查 看 当 前 目 录 结 构 tree
这里写图片描述

当前文件夹下的目录结构 如上图

这里写图片描述

在我们执行ls test.txt b.txt之后,一共有两种输出,其中ls: 无法访问b.txt: 没有那个文件或目录是错误输出,test.txt是标准输出。

在上述命令中,我们将原来的标准输出重定向到了out文件中,所以控制台只剩下了错误提示。

高级用法

我们来看

/dev/null 2>&1
这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。
- >/dev/null
这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。
- 2>&1
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

  • “>/dev/null”等同于”1>/dev/null” .
  • & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

  • 1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

  • 2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。


欢迎技术交流: science168@126.com

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值