11. Shell 输入输出重定向 Myth丶恋晨 2022-02-03 09:34 284阅读 0赞 > Shell 默认的输入为键盘输入, 默认输出则是终端的Shell 窗口. 但是有时候我们希望某些命令输出的内容不显示,或者想将输出的结果写入其它文件, 这就用到了输出重定向. 输出重定向不常用, 所以就不做描述了. ## 1. Linux 下的标准输入输出 ## Linux 下一切皆文件, 输入输出也不例外.虽然标准输入时键盘输入, 标准输出为终端显示器,但是在linux 中标准输入输出也对应着响应的文件. 一般情况下, 每个Linux 命令运行时都会打开三个文件: * 标准输入文文件(/dev/stdin): 文件描述符为0, linux 程序默认从stdin 读取数据 * 标准正确输出文件(/dev/stdout): 文件描述符为1, linux 程序默认将正确输出写入stdout中 * 标准错误输出文件(/dev/stderr): 文件描述符为2, linux 程序默认会将错误输出写入stderr 文件夹中 [admin@localhost shell]$ ll /dev/std* lrwxrwxrwx. 1 root root 15 Jun 19 13:46 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx. 1 root root 15 Jun 19 13:46 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx. 1 root root 15 Jun 19 13:46 /dev/stdout -> /proc/self/fd/1 [admin@localhost shell]$ ## 2.输出重定向 ## ### 2.1 文件重定向 ### 在进行shell 脚本编程的时候, 我们可能会将一些命令输出或者结果输出到指定文件中, 那么就可以使用输出重定向了. \*\* 常用重定向: \*\* <table> <thead> <tr> <th align="left">语法</th> <th align="left">描述</th> </tr> </thead> <tbody> <tr> <td align="left">命令 > 文件</td> <td align="left">以覆盖方式, 将正确输出写入文件中</td> </tr> <tr> <td align="left">命令 >> 文件</td> <td align="left">以追加方式, 将正确输出写入文件中</td> </tr> <tr> <td align="left">命令 2> 文件</td> <td align="left">以覆盖方式, 将命令错误输出写入文件中</td> </tr> <tr> <td align="left">命令 2>> 文件</td> <td align="left">以追加方式, 将命令错误输出写入文件中</td> </tr> <tr> <td align="left">命令 &> 文件</td> <td align="left">已追加方式, 将命令正确&错误输出写入文件中</td> </tr> <tr> <td align="left">命令 &>> 文件</td> <td align="left">已追加方式,将命令正确&错误输出写入文件中</td> </tr> <tr> <td align="left">命令 >> 文件1 >> 文件2</td> <td align="left">以追加方式,将命令正确输出写入文件1,将错误输出写入文件2</td> </tr> </tbody> </table> * > 表示以覆盖方式写入, 会先将原来的文件内容情况后写入 * > > 表示以追加方式写入, 不会修改原来的文件内容, 直接在原来文件末尾追加 ### 2.2 特殊重定向 ### LInux 中很多命令都是有输出结果的, 有时我们希望不显示命令的输出结果, 但又不想将文件写入其它文件, 那么我们只需要将输出结果重定向到 /dev/null 文件即可. /dev/null 是一个特殊文件, 类似于linux 的黑洞一样. [admin@localhost shell]$ ll /dev/null crw-rw-rw-. 1 root root 1, 3 Jun 19 13:46 /dev/null [admin@localhost shell]$ [admin@localhost shell]$ ll /dev/null crw-rw-rw-. 1 root root 1, 3 Jun 19 13:46 /dev/null [admin@localhost shell]$ ## 3.示例程序 ## #!/bin/bash #定义正确输出, 错误输出文件 f_std=info.txt f_err=error.txt f_all=all.txt # 测试正确输出 echo "测试正确输出:" > $f_std ls -d /s* >> $f_std # 测试错误输出 echo "测试错误输出,清空文件:" > $f_err ls /hh 2>> $f_err # 测试正确错误输出 echo "测试全部输出, 清空文件" &> $f_all ls -d /s* &>> $f_all ls /hh &>> $f_all \*\* 测试输出: \*\* [admin@localhost shell]$ ./redirect.sh [admin@localhost shell]$ cat info.txt 测试正确输出: /sbin /selinux /srv /sys [admin@localhost shell]$ cat error.txt 测试错误输出,清空文件: ls: cannot access /hh: No such file or directory [admin@localhost shell]$ cat all.txt 测试全部输出, 清空文件 /sbin /selinux /srv /sys ls: cannot access /hh: No such file or directory [admin@localhost shell]$
还没有评论,来说两句吧...