如何启动具有捕获输出的子进程,但让子进程相信它未被捕获?

如何启动具有捕获输出的子进程,但让子进程相信它未被捕获?

想象一下my_binary以这两种方式启动一个子进程(为了简单起见,我使用 bash,但我认为这也适用于 POSIX 系统上的其他语言):

#!/bin/bash

# 1) inherit stdout/stderr
my_binary

# 2) explicitly capture stdout/stderr
my_binary 2>&1 > output.log

二进制文件在捕获输出时通常会有不同的表现。例如,ls通常会禁用捕获输出的颜色输出,除非使用 强制执行--color=always

现在考虑这样一种情况,my_binary在捕获的输出下行为不同,但缺乏明确的输出控制机制,即相当于--color=always。我试图找出:

  • 内部使用什么机制来确定 I/O 流的功能?
  • 是否可以从外部“伪造” I/O 流功能,即my_binary使用捕获的输出运行,但让其表现得就像没有捕获输出一样?

相关内容