ptybandage — wrap a transparent pty around a program
ptybandage
{subprogram
} {args
...}
ptybandage obtains a new pty and runs subprogram
under it.
This has the following effects:
Descriptors 0, 1, and 2 of subprogram
are redirected to the pty.
ptybandage's input is transparently forwarded to the pty's input; the pty's output is transparently forwarded to ptybandage's output.
The pty's mode is set to the mode of ptybandage's controlling tty. Meanwhile, ptybandage's controlling tty is set to raw mode.
When subprogram
exits, ptybandage exits with the same exit code, after restoring the mode of its controlling tty.
If subprogram
stops, ptybandage stops with the same signal, temporarily restoring the mode of its controlling tty.
When ptybandage continues, subprogram
's process group will receive a SIGCONT.
ptybandage forwards window-size changes to the pty.
The controlling tty of subprogram
is replaced with the pty.
As an added bonus, ptybandage gives subprogram
descriptor 3 pointing to /dev/tty
, and an environment variable TTY
giving the name of the pty.
Beware: ptybandage also closes descriptors 4, 5, and 9.
ptybandage is useful for handling programs that refuse to run inside a pipe.
As far as subprogram
can see, it is talking to a tty.
ptybandage doesn't mind being put inside a pipe.
ptybandage also fools isatty(3).
If subprogram
uses stdio, its output will be line-buffered.
ptybandage is a synonym for ptyget ptyio -t ptyspawn. ptyspawn(1) options may be used with ptybandage.