| Crates.io | faketty |
| lib.rs | faketty |
| version | 1.0.19 |
| created_at | 2020-09-21 17:22:04.737272+00 |
| updated_at | 2025-04-30 04:24:13.901588+00 |
| 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,411 |
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.