1

我想将 (stdout,stderr) 从一个进程重定向到另一个进程的 (stdin,file descriptor 3)。我怎么做?

例如,如果我有myscript.sh

#!/bin/sh
# myscript.sh
echo "stdout"
echo "stderr" >&2

并且reader.sh

#!/bin/sh
# reader.sh
read key
echo "stdin: $key"
read key <&3
echo "fd3: $key"

如何将输出通过管道myscript.sh传输到reader.sh最终输出为:

stdin: stdout
fd3: stderr

我得到的最接近的是:

./myscript.sh 2>&3 | ./reader.sh

但这挂起等待输入(来自 fd 3)

4

1 回答 1

2

我会用命名管道来做到这一点:

mkfifo err 
./myscript.sh 2>err | ./reader.sh 3<err

在您的尝试中执行 2>&3 只会将 stderr 发送到父 shell 指向 3 的任何位置,如果您尚未在该 shell 中打开 3 ,则会失败。它对 reader shell 的 3 没有任何好处;即使继承,它也将作为写入 fd,而不是读取 fd。

于 2013-10-31T20:02:18.153 回答