bash的输入重定向和输出重定向
标准输入和输出:
设备 | 设备文件名 | 文件描述符 | 类型 |
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
由于输入和输出的设备文件名写起来比较繁琐,所以bash中为这3种设备都起了一个代号,即文件描述符。
输入重定向(一般比较少用到):
命令 0< 文件名:如wall 0< test:把test文件的内容广播出去
输出重定向:
标准输入重定向:本来命令或者错误命令的输出应该是输出到我们操作的界面上,现在改变了输出的方向,输出到指定文件或设备当中。
1、命令 > 文件:以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
2、命令 >> 文件:以追加的方式,把命令的正确输出输出到指定的文件或设备当中
标准错误输出重定向:
1、错误命令 2> 文件:以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
1、错误命令 2>> 文件:以追加的方式,把命令的错误输出输出到指定的文件或设备当中
上面的重定向命令如果指定的文件不存在,会自动创建文件。
由于正确输出和错误输出的重定向格式不一样,现实应用中我们既然知道一个命令会报错,那我们执行就完全没有意义了。所以我们需要能统一重定向正确输出和错误输出的格式:
命令 > 文件 2>&1:以覆盖的方式,把正确输出和错误输出都保存到同一个文件中。
命令 >> 文件 2>&1:以追加的方式,把正确输出和错误输出都保存到同一个文件中。
命令 &> 文件:以覆盖的方式,把正确输出和错误输出都保存到同一个文件中。
命令 &>> 文件:以追加的方式,把正确输出和错误输出都保存到同一个文件中。
命令>>文件a 2>>文件b:把正确输出追加到文件a中,把错误输出追加到文件b中。
在Linux中有一个特殊的文件/dev/null,可以理解成黑洞,所有不管是覆盖还是追加到这个文件的内容都是看不了的,所以在有些时候我们只需要执行一个命令,不管是错误执行还是正确执行,我们都不想看到任何输出,仅仅是执行就足够了,那么可以用重定向的方法把执行的输出结果写入到这个文件中:命令 &> /dev/null。