ABS / 多敲码 · 2022年11月23日 0

输入/输出重定向

重定向是指捕获文件、命令、程序、脚本甚至脚本中代码块的输出,并把捕获结果传递输入给另外一个文件、命令或脚本。
在Linux中, “一切皆文件”,所以这里面除了输入、输出以外,还涉及到“文件”这个最重要的概念。

每一次打开文件都都会被分配一个文件描述符。默认输入、输出用途的文件描述符分别是0、1, 打开出错的情况下描述符为2.在此基础上打开额外文件的描述符被分配3-9的数字,其效果等价于表示输入的1。通过文件描述符可以对文件及其内容进行操作,每一个描述符都等同于一个被打开的文件。(Shell里面是打开即使用的,而C语言是需要有一个专门的打开动作操作。)

&符号和输入输出符号结合是有两种情况:1)当前后都是文件操作符时,需要使用&。2)前一种情况的细化,a)表示输出/输入和出错信息的结合时,&在>前面,b)表示区分两个文件操作符时,在>后面;3)从只有一个3-9的描述符输入时,放在描述符一侧。

&-表示关闭文件,输入和输出,关谁就在谁那一侧。

当存在多个文件时,exec是非常有用的操作,可以把exec理解为是一个设置命令,它连接了文件名和描述符:1)把输入源设置为对应某fd值的文件; 2)把对应某fd值的文件内容输出给其他文件。

把文件内容重定向到代码块,一般是放在代码块最后(右花括号}的后面),以<“filename”的形式。

输入输出重定向的聪明用法一般是解析和粘合命令输出的内容碎片,以形成一个完整的文件内容,典型使用场景就是生成运维报告和日志文件。