标准I/O重定向和管道

CodeAegis
• 阅读 2177

标准输入和输出

打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序提供三种I/O设备

  • 标准输入(STDIN)       - 0  默认接受来自终端窗口的输入
  • 标准输出(STDOUT)   - 1  默认输出到终端窗口
  • 标准错误(STDERR)   - 2  默认输出到终端窗口

I/O重定向redirect

I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标

标准输出和错误重新定向

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端
支持的操作符号包括:

1> 或 >  把STDOUT重定向到文件
2>          把STDERR重定向到文件
&>         把所有输出重定向到文件

以上如果文件已经存在,文件内容会被覆盖

set -C 禁止将内容覆盖已有文件,但可追加,利用 >| 仍可强制覆盖
set +C 允许覆盖,默认 

追加
\>\>  可以在原有内容基础上,追加内容
把输出和错误重新定向追加到文件

\>\>   追加标准输出重定向至文件
2>> 追加标准错误重定向至文件

标准输出和错误输出各自定向至不同位置

COMMAND  > /path/to/file.out  2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向
& >    覆盖重定向
&>>   追加重定向

COMMAND >   /path/to/file.out 2>&1
COMMAND >>  /path/to/file.out 2>&1

合并多个程序






标准输入重定向

从文件中导入STDIN,代替当前终端的输入设备,使用 < 来重定向标准输入
某些命令能够接受从文件中导入的STDIN

tr命令


标准输入重定向




把多行重定向




管道








点赞
收藏
评论区
推荐文章
go语言中,Printf()、Sprintf()、Fprintf()函数的区别用法是什么?
Printf()、Sprintf()、Fprintf()函数的区别用法是什么?  都是输出格式化字符串,只是输出到的目标不一样:    Printf()是把格式化字符串输出到标准到标准输出(一般是屏幕,可以重定向)    Printf()是和标准输出文件(stdout)关联的,Fprintf则没有这个限制    Sprintf()是
Stella981 Stella981
3年前
Linux三剑客之awk详解
第一篇awk简介与表达式实例一种名字怪异的语言模式扫描和处理,处理数据和生成报告。awk不仅仅是linux系统中的一个命令,而且是一种编程语言;它可以用来处理数据和生成报告(excel);处理的数据可以是一个或多个文件;可以是直接来自标准输入,也可以通过管道获取标准输入;awk可
Stella981 Stella981
3年前
DISPLAY变量和xhost(原创)
DISPLAY在Linux/Unix类操作系统上,DISPLAY用来设置将图形显示到何处.直接登陆图形界面或者登陆命令行界面后使用startx启动图形,DISPLAY环境变量将自动设置为:0:0,此时可以打开终端,输出图形程序的名称(比如xclock)来启动程序,图形将显示在本地窗口上,在终端上输入printenv查看当前环境变量,
Wesley13 Wesley13
3年前
Java【NIO2】- 系列 1: 为什么要写【NIO2】系列?
1\. 基本概念IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。所有语言运行时系统提供执行I/O较高级别的工具。(c的printfscanf,java的面向对象封装)2\.  Java标准io回顾Java标准
Stella981 Stella981
3年前
SHELL编程四剑客之Sed工具
SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本。Sed工具在处理文本时默认把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace)。如果要将变化写入磁盘、文件需要使用i参数。sed命令语法参数格式:sed参数‘sed内置命令字符‘
Stella981 Stella981
3年前
Linux中标准输出和标准错误的重导向
如果一个命令需要长时间在服务器上运行,那么很多时候会用到nohup命令,这时即便远程登录ssh中断了与服务器的联系,那么在服务器上运行的命令也不会因此而被迫停止。通常情况下,nohup与&连用,&的意思是将该命令放在后台执行。如下:nohupexample.sh&将exmaple.sh通过&放在服务器后台运行,nohup确保了即便当前
Stella981 Stella981
3年前
Go语言fmt.Printf使用指南
Go语言fmt.Printf使用指南fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。fmtfmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。向外输出标准库fmt提供了以下几
Stella981 Stella981
3年前
Linux 重定向与管道符
重定向与管道符重定向作用:将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上0标准输入键盘stdin仅读取1标准输出终端stdout仅写入2标准错误终端stderr仅写入3filename其他文件读/写在Li
Stella981 Stella981
3年前
Linux xargs命令
xargs(英文全拼:eXtendedARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs默认的命令是echo,这意味着通过
Wesley13 Wesley13
3年前
linux管道
管道是单向的字节流,它将某个进程的标准输出连接到另一个进程的标准输入。管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。管道和有名管道的读写规则是在程序中应用它们的关键。管道相关的概念在linux中管道是通过指向同
C/C++基础知识
//main程序入口argc命令行变量的数量argv命令行变量的数组intmain(intargc,charargv在上述例子中,main的返回类型是int,而返回值0的确是一个int类型的值。标准输入:istream——cin标准输出:ostream——cout、cerr、clog通常使用cerr来输出警