linux的标准输入输出
程序员文章站
2022-04-09 22:50:51
...
1.文件描述符
- 文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket。
- 最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应
文件描述符 | 缩写 | 描述 |
---|---|---|
0 | STDIN | 标准输入 |
1 | STDOUT | 标准输出 |
2 | STDERR | 标准错误输出 |
Shell会自动为我们打开和关闭0、1、2这三个文件描述符,我们不需要显式地打开或关闭它们。标准输入是命令的输入,默认指向键盘;标准输出是命令的输出,默认指向屏幕;标准错误是命令错误信息的输出,默认指向屏幕。
2.重定向的使用规律
- 标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个
- 标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
- 文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&
- 文件描述符与重定向符号之间不能有空格
3.测试
这里使用(echo 1; echo1 1)命令测试
[root@testhost shell-study]# (echo 1; echo1 1)
[root@testhost shell-study]# (echo 1; echo1 1)>1.log
可以看到标准输出进了1.log,标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
[root@testhost shell-study]# (echo 1; echo1 1) 1>1.log 2>2.log
可以看到标准输出进入了1.log,标准错误进入了2.log
[root@testhost shell-study]# (echo 1; echo1 1) 2>&1 >1.log
表示把错误出定向到标准输出(此时标准输出为终端,所以输出到终端), 标准输出定位到文件( >1.log其实是1>1.log),所以看到错误信息输出到终端,而正确信息保存到了1.log
把上面的位置调换下,先把标准输出定位到1.log
[root@testhost shell-study]# (echo 1; echo1 1) >1.log 2>&1
把标准输出定位到文件,错误输出到标准输出(此时标准输出指向文件,所以输出到文件) /dev/null 代表空设备文件,我们经常把输出定位到/dev/null这样可以避免程序不必要的打印。
[root@testhost shell-study]# (echo 1; echo1 1) >/dev/null 2>&1
这样把标准输入定位到空,再把标准错误定位到标准输出。
上一篇: 算法-标准输入和输出
下一篇: Python读取Excel内容到txt中