前言

I/O重定向允许我们将命令的输入和输出重定向到文件中,以及将多个命令连接到一起成为管道。本文就来介绍有关重定向的知识。

标准输入、输出、错误

输出包括两种类型:

  • 程序的结果。被称为标准输出或者stdout
  • 状态以及错误信息。被称为标准错误或者stderr

除此之外,一些程序从标准输入stdin中获取输入。默认情况下,标准输入与键盘相连接。

默认情况下,stdoutstderr 都被链接到屏幕上,而不是保存到文件中。重定向允许我们改变输出的去向和输入的来源。

重定向标准输出

为了重定向到其他文件而不是屏幕上,我们使用>重定向操作符,后面跟随文件的名称。

举例来说,我们可以使用重定向操作符来告诉shell,发送ls命令的输出到ls-output.txt文件中,而不是屏幕上。

ls -l /usr/bin > ls-output.txt

我们可以看到,ls命令的输出没有发送到屏幕上,而是发送ls-output.txt到文件中。

需要注意的是,使用>重定向操作符会覆盖目标文件。如果要追加内容,我们可以使用>>重定向操作符。

重定向标准错误

为了重定向stderr,我们必须引用其文件描述符。shellstdoutstdinstderr分别作为文件描述符0、1和2的内部引用。我们可以用这个符号重定向stderr

ls -l /bin/usr 2> ls-error.txt

重定向到同一文件

重定向标准输出和标准错误到同一文件中,共有两种方式可以实现。首先让我们使用传统方法,它适用于老版本的shell

ls -l /bin/usr > ls-output.txt 2>&1

首先,我们将stdout重定向到ls-output.txt文件,然后用2>&1的符号将文件描述符2 stderr重定向到文件描述符1 stdout 中。

需要注意重定向的顺序,重定向stderr必须总是在重定向stdout之后发生。

最近版本的bash提供了第二种方法,该方法让执行这种组合重定向更精简。

ls -l /bin/usr &> ls-output.txt

你仍然可以使用>>进行追加操作。

处理不需要的输出

系统提供了一种方法,可以将输出重定向到一个叫做/dev/null的特殊文件,该文件通常被称为比特桶(bit bucket)。它接受输入,但不做任何处理。

ls -l /bin/usr 2> /dev/null

重定向标准输入

还有< 重定向操作符,我们可以将stdin的来源从键盘改为文件。

cat < sample.txt

管道

使用管道操作符| ,一个命令的stout可以通过管道进入另一个命令的stdinless就是一个例子:

ls -l /usr/bin | less

可以把几个命令放在一起,组成一个流水线。使用这种方式的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。

tee命令

tee命令读取stdin并将其复制到stdout和一个或多个文件中。

ls /usr/bin | tee ls.txt | grep zip

最新文章

  1. 【React】组件生命周期
  2. Visual Studio.NET单选题
  3. Kinect 图像帧的格式
  4. 【转载】GBDT(MART) 迭代决策树入门教程 | 简介
  5. 关于ABP——领域服务的思考
  6. js 事件冒泡和事件捕获
  7. 2018年,请不要再使用OLE生成EXCEL文件
  8. u-boot(一)启动简介
  9. laravel简书(1)
  10. LeetCode 917 Reverse Only Letters 解题报告
  11. P3809 【模板】后缀排序
  12. 用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)-陈远波
  13. Java序员的成长之路
  14. CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看
  15. android NDK编程:使用posix多线程与mutex相互排斥同步
  16. Linux kernel 之 kobject
  17. jdk1.8新特性应用之Iterable
  18. Swift-9-类和结构体
  19. ssm框架搭建出现的异常:The import org.springframework cannot be resolved
  20. 使用TextView/EditText应该注意的地方,监听EditText,addTextChangedListener

热门文章

  1. 135_Power Query M语言快捷输入之输入法设置自定义短语
  2. Golang 常见设计模式之单例模式
  3. 论文解读(gCooL)《Graph Communal Contrastive Learning》
  4. React项目配置npm run build命令分环境打包
  5. 如何优化PlantUML流程图(时序图)
  6. Javaer 面试必背系列!超高频八股之三色标记法
  7. 龙芯发布 .NET 6 SDK 6.0.105-ea1 LoongArch64 版本
  8. ABP Framework 5.3.0 版本新增功能和变更说明
  9. Python基础学习笔记_02
  10. 关于vue cli 使用iview 自定义主题遇到的坑