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中。