exec 1> >(logger -s -t tagname) 2>&1 中 1> 的用途是什么?

Kar*_*ter 5 shell bash io-redirection exec

我只是偶然发现

exec 1> >(logger -s -t $(basename $0)) 2>&1
Run Code Online (Sandbox Code Playgroud)

它用于将当前脚本的输出重定向到系统记录器(如果您从未见过这个,但有兴趣查看/sf/ask/622177601/命令来拓宽您的 shell 知识)。

我想知道为什么这1>是必要的。这似乎是必要的,因为exec >(logger -s -t test) 2>&1失败的原因是

bash: /dev/fd/63: Permission denied
bash: exec: /dev/fd/63: cannot execute: Permission denied
Run Code Online (Sandbox Code Playgroud)

然而,省略1>是我凭直觉所做的,因为exec >[some redirection target]根据上面链接的问题已经足以进行重定向。2>&1然后像平常一样将 stderr 重定向到 stdout。

我正在使用 bash 4.4.19。

小智 4

这是必要的(可以简单地写成extra ,>而不是 the )。进程替换将扩展为类似(文件名)的内容,然后将标准输出重定向到其中。从那时起。11>>>(...) /dev/fd/13>> >(...)