Crates.io | faketty |
lib.rs | faketty |
version | 1.0.18 |
source | src |
created_at | 2020-09-21 17:22:04.737272 |
updated_at | 2024-08-11 02:43:00.768936 |
description | Wrapper to exec a command in a pty, even if redirecting the output |
homepage | |
repository | https://github.com/dtolnay/faketty |
max_upload_size | |
id | 291231 |
size | 31,064 |
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
places.
The faketty
command in this repo is similar to script --quiet --return --command '...' /dev/null
except that it preserves distinct stdout and stderr
streams.