高级文件描述符重定向,如何同时处理多个文件描述符

高级文件描述符重定向,如何同时处理多个文件描述符

我知道基本的重定向,但我很困惑应该如何处理同时具有多个文件描述符的情况。

例如,我有写入 FD12的脚本3。我想输出script::1script::2stderr 和script::3stdout。

像这样的东西,不起作用:

./script.sh \
    1>&2 \
    2>&2 \
    3>&1

我想要的重定向如何进行?我不知道要搜索什么。

我知道我可以解决这个问题,而且我实际上已经准备好了解决方法,但我想知道如何做这样的高级魔法。也许有重定向到的东西/proc/self/fd/{1,2}

 +-----------+            +-----------------+
 |           >1 ---+---- 2>                 |
 | script.sh >2 ---^      |       TTY       |
 |           >3 -------- 1>                 |
 +-----------+            +-----------------+

答案1

我有script写入 FD12的功能3。我想输出script::1script::2stderr 和script::3stdout。

只需更改顺序:

./script.sh 3>&1 1>&2

[你可以省略2>&2,你只需要那个克什米尔对于 fds 大于 2 ;-) ]

对 fd 重定向运算符的最大困惑来自于这样一个事实:人们似乎将神奇的属性附加到><字符上——事实上,>&并且<&100%相同

每次你看到p>&qp<&q在哪里pq是数字时,将其解析为fd_p = fd_q作业。

那么很容易看出,如果从 和 开始fd1: outfd2: err从左到右fd3=fd1 fd1=fd2计算将得到fd1: err,fd2: errfd3: out

相关内容