我试图在将 stdout 复制到 fd 3 后将其重定向到 /dev/null (以便丢弃第三方库对 stdout 的使用)。这在 shell 脚本(包括从另一个 shell 脚本调用的 shell 脚本和从 shell 脚本调用的 Python 脚本)中工作得很好。但是,Docker 似乎正在关闭 fd 3,因此我的应用程序无法写入它。
ubuntu$ cat run.sh
echo No hello from me!
echo Hello from me >&3
ubuntu$ sh run.sh
No hello from me!
run.sh: line 2: 3: Bad file descriptor
ubuntu$ sh run.sh 3>&1 >/dev/null
Hello from me
ubuntu$ docker run --rm -v$PWD:$PWD -w$PWD ubuntu sh run.sh
./run: 2: 3: Bad file descriptor
No hello from me!
ubuntu$ docker run --rm -v$PWD:$PWD -w$PWD ubuntu sh run.sh 3>&1 >/dev/null
./run: 2: 3: Bad file descriptor
ubuntu$
我期望最后的输出与重定向的 shell 命令的输出相同。
这将重定向 fd 3:
docker run --rm -v$PWD:$PWD -w$PWD ubuntu sh -c './run.sh 3>&1 >/dev/null'
毕竟你想压制它。