自学Linux Shell14.1-理解输入输出
14.1-理解输入输出(点击这里获得更多)
两种显示脚本输出的方法:
- 在显示器屏幕上显示输出
- 将输出重定向到文件中
1. 标准文件描述符
linux系统将每个对象当做文件处理,这包括输入和输出进程。
linux系统用文件描述符来标示每个文件对象。
文件描述符是一个非负整数,可以唯一标识会话中打开的文件。
每一个进程一次最多可以有9个文件描述符,处于特殊的目的,bash shell保留了前3个文件描述符(0,1,2),如下:
| 文件描述符 | 缩写 | 描述 |
|---|---|---|
| 0 | STDIN | 标准输入 |
| 1 | STDOUT | 标准输出 |
| 2 | STDERR | 标准错误输出 |
- <: 从文件中读取内容。
- >: 将内容插入到文件,每次插入前都会清空文件内容。
- >>: 将内容插入到文件, 将内容追加到现有文件的末尾。
1.1 STDIN
对于终端界面来说,标准输入就是键盘。
shell从STDIN文件描述符对应的键盘获得输入,在用户输入时处理每个字符。
使用输入重定向符号<时,linux会用重定向指定的文件来替代标准输入文件描述符,它会读取文件并提取数据,如同在键盘输入的。
举例1:
cat命令处理STDIN输入的数据,输入一个就显示一个,按ctrl+c即可结束。
举例2:
也可通过使用输入重定向符号 < 时,强制cat命令接受来自另一个非STDIN文件的输入,Linux会重写向指定的文件来替换文字的输入文件描述符。
1.2 STDOUT
在终端界面上,标准输出就是终端显示器。
shell的所有输出会被定向到标准输出中,也就是显示器
举例1:
使用输出重定向 > 来改变输出

举例2:
使用输出重写向 >> 可以追加某个文件。


1.3 STDERR
Shell通过特殊的STDERR文件描述符来处理错误消息。标准的错误输出。
shell或shell中运行的程序或脚本出错时声称的错误消息都会发送到这个位置。
默认情况下,错误信息的输出也会显示到显示器的输出中。
2. 重定向错误
有几种办法实现:
第一种: 只重定向错误。STERR文件描述符被设成2,ls 查看一个/home目录不存在的文件将错误输出到file文件,屏幕上不会显示错误。
第二种:重写向错误和数据,如果想重写向错误和正常输出,必须用两个重写向符号。STDOUT文件描述符被设为1,STERR文件描述符被设成2。

第三种: 使用 &> 也可以将STDOUT STDERR的输出重定向到同一个输出文件,且输出的错误数据在最前面以便最近浏览错误信息

3. 重定向输出
两种方法在脚本中重定向输出:
- 临时重定向行输出
- 永久重定向脚本中的所有输出 exec命令
3.1 临时重定向行输出
默认情况下,linux会将STDERR导向STDOUT。但是如果你在运行脚本时重定向了STDERR,脚本中所有导向STDERR的文本会被重定向。
3.2 永久重定向脚本中的所有输出 exec命令
如果脚本中有大量数据需要重定向,那重定向echo语句就会很繁琐,所以可以使用exec命令,它告诉shell在脚本执行期间重定向某个特定文件描述符。

exec命令会启动一个新shell将STDOUT文件描述符重定向到文件testout中。
自学Linux Shell14.1-理解输入输出的更多相关文章
- 自学Linux Shell11.4-重定向输入输出
点击返回 自学Linux命令行与Shell脚本之路 11.4-重定向输入输出 Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输 ...
- 自学Linux Shell14.2-在脚本中使用其他文件描述符
点击返回 自学Linux命令行与Shell脚本之路 14.2-在脚本中使用其他文件描述符 在脚本中重定向输入和输出,并布局限于以上讲的3个默认的文件描述符,shell最多可以有9个打开的文件描述符.这 ...
- 自学Linux Shell14.3-创建临时文件
点击返回 自学Linux命令行与Shell脚本之路 14.3-创建临时文件mktemp Linux系统保留了一个特殊的目录位置,以供临时文件使用.Linux使用/tmp目录处理不需要永久保存的文件. ...
- 自学Linux命令行与Shell脚本之路
自学Linux命令行与Shell脚本之路[第一回]:初识Linux 1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3 ...
- 自学Linux Shell1.3-Linux文件系统
点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...
- 自学Linux Shell1.1-Linux初识
点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...
- 自学Linux Shell3.3-列表命令ls
点击返回 自学Linux命令行与Shell脚本之路 3.3-列表命令ls ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名. ...
- 自学Linux Shell4.1-监测程序ps top kill
点击返回 自学Linux命令行与Shell脚本之路 4.1-监测程序ps top kill 1. PS命令 linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的 ...
- 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包
点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...
随机推荐
- BZOJ3451 Normal 期望、点分治、NTT
BZOJCH传送门 题目大意:给出一棵树,求对其进行随机点分治的复杂度期望 可以知道一个点的贡献就是其点分树上的深度,也就是这个点在点分树上的祖先数量+1. 根据期望的线性性,考虑一个点对\((x,y ...
- 广电的宽带网络真流氓,替换google的广告为百度的广告
以前联通也有干过这事,最近联通,有没有继续干,不清楚.没有用联通了. 最近,连到某wifi,发现网站的google广告,居然显示成百度的,特别去访问另一家网站,发现,本该是google广告的位置,同样 ...
- 2016年总结 - Java程序员
一 . 技术积累 (1)代码规范 1.1.1.通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你的接口 ...
- FreeRTOS 任务与调度器(1)
前言: Task.c和Task.h文件内是FreeRTOS的核心内容,所有任务和调度器相关的API函数都在这个文件中,它包括下图这些内容FreeRTOS文件如下: Task.c和Task.h文件内是F ...
- 破解Zip加密文件常用的几种方法
前言 在互联网的浪潮中,大家也许碰到过这种情况: 从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开.这个时候,我们 ...
- Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
在linux系统下,如果下载并安装了应用程序,在启动时很有可能在键入它的名称时出现"command not found"的提示内容.如果每次都到安装目标文件夹内,找到可执行文件来进 ...
- [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
测试mysqld启动mysql server的时候,报如下错误: 2015-12-17 00:46:02 10785 [ERROR] Fatal error: Please read "Se ...
- vue自定义公共组件components||在vue中,解决修改后的数据不能渲染到dom上的bug
//主页面框架用来嵌入:Main.vue <el-col :span="24" > * { margin: 0; padding: 0; } html { width: ...
- C. Multi-Subject Competition
链接 [https://codeforces.com/contest/1082/problem/C] 题意 有n个人,m个科目,每个人都有选的科目si,以及他的能力值ri, 规则是每个科目要么选要么不 ...
- Windows10安装ubuntu & caffe GPU版
1.Ubuntu https://www.cnblogs.com/EasonJim/p/7112413.html https://blog.csdn.net/jesse_mx/article/deta ...