A wrapper binary to exec a command in a pty, even if redirecting the output.
This allows logging the stdout and stderr (separately) of a process, without the output being different from what you'd see in the terminal if you weren't logging anything.
$ cargo install faketty
$ faketty bazel build :target >log/out 2>log/err ~~~~~~~~~~~~~~~~~~~ command to run
When redirecting stdout/err to a pipe or file, a process may detect the output is no longer going to a tty (because it has no width/height, baud rate, etc) and may change its behavior accordingly. For example many programs that involve a progress bar or colored text in a terminal disable those things when the output is not going to a terminal.
There is a script(1) command which makes it possible to redirect a command's
terminal-style output by executing it inside a pseudoterminal (pty) – a
bidirectional pipe that also has width, height, etc and tricks the process into
thinking it is talking to a real terminal. However,
script only uses a single
pty, which makes it impossible to demultiplex stdout and stderr to different
faketty command in this repo is similar to
script --quiet --return --command '...' /dev/null except that it preserves distinct stdout and stderr