Bash 中“2> >(command)”重定向的含义

Bash 中“2> >(command)”重定向的含义

不久前,我制作了一个脚本,并在其周围添加了一些日志记录,但我忘记了日志记录的重定向是如何工作的:-(

其要点是:

#!/bin/bash

LOGFILE=/some/path/mylogfile

(
  # here go my commands which produce some stdout
  # and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )

当我运行脚本时,它不会打印任何内容到stdout,而只打印到 的内容stderr。日志文件${LOGFILE}捕获标准输出和标准错误。

当我运行脚本并且终端上没有输出时,我知道一切都很好。如果有任何输出,我就知道出了问题,我可以检查日志文件以找出问题所在。

现在令我困惑的重定向部分是以下语法:2> >( some command )

谁能解释一下那里发生了什么事吗?

答案1

>(...)叫做流程替代。它让“外部”程序写入“内部”程序,就好像它是一个文件一样。

在这种情况下,它正在写入将附加到的内容stderr,然后还将所有内容写回到。tee -a ${LOGFILE} >&2LOGFILEstderr

重定向运算符可以向任一方向进行进程替换,因此您可以对其进行写入(如本例所示),或者使用<(...)它进行读取,这是一种方便的方法,例如,while无需在子 shell 中运行即可执行循环本身。

相关内容