【shell 基础13】输入输出与重定向

一. 标准输入和标准输出

linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,文件描述符分别是 0、1、2。

当运行命令时,命令启动的进程就会自动打开这三个保留的文件描述符。
如下图
在这里插入图片描述

在 Linux中 一切都是文件,包括输入和输出,其中:

  • 0 表示标准输入,对应的文件描述符是 /proc/self/fd/0。
  • 1 表示标准输出,对应的文件描述符是 /proc/self/fd/1。
  • 2 标准错误,对应的文件描述符是 /proc/self/fd/2。

可以使用这些文件描述符来控制命令程序或者脚本的输入和输出。

我们常用的命令2>&1的含义是标准错误重新定向到标准输出,即指将标准输出、标准错误指定为同一输出路径。

 
 

二、重定向

1. 定义

shell在执行命令时可以修改标准输入的输入源和标准输出的目标位置,这个功能称为重定向。

在重定向时,n> file这种语法表示将文件描述符n的输出重定向到file文件。如果省略n,文件描述符则默认为1,因此>会对标准输出重定向。

在这里插入图片描述
 

2. 输出的重定向

标准输出的目标位置通常指向的是终端屏幕。可以使用 > 符号修改标准输出的目标位置。
 

例子1:
比如下面的示例就会将ps命令的输出重定向到result.txt文件。

$ ps > result.txt  ←----- 由于已经重定向到 result.txt 文件,所以屏幕上不会输出任何内容
$ cat result.txt
  PID TTY          TIME CMD
10745 pts/0    00:00:00 bash
10873 pts/0    00:00:00 ps

 
例子2:
echo命令的执行结果将被重定向到hello.txt文件。

$ echo hello > hello.txt
$ cat hello.txt
hello

注:

只要命令能将执行结果输出到标准输出,就可以实现重定向。

3. 对标准错误输出重定向

要想对标准错误输出的错误信息进行重定向,可以使用2>符号。

例子:ls命令的标准错误输出会被重定向到error.txt文件。

$ ls /xxx 2> error.txt
$ cat error.txt
ls: 无法访问'/xxx': 没有那个文件或目录

4. 输入的重定向

对标准输入也可以像对标准输出一样进行重定向操作。

以tr命令为例:
tr命令是用于替换字符串的命令,其语法为tr 待替换的字符串 被替换后的字符串

tr b B

abc'
aBc'
my book

从键盘输入一些内容后,tr命令会以行为单位替换输入内容,并输出替换后的结果。要想退出tr命令,可以使用Ctrl + D结束输入状态。

猜你喜欢

转载自blog.csdn.net/hiliang521/article/details/130689520