3 ms·
> I often pipe output to tee and would be pretty annoyed if that changed the behavior of the original command The output sent to tee is usually not the same as
by indymike 3y ago
> I often pipe output to tee and would be pretty annoyed if that changed the behavior of the original command
The output sent to tee is usually not the same as the output from the command to the terminal, so you are getting something different than most human users expect from original command... the reason is that terminal escape codes and other formatting for humans may need to be omitted from output to a pipe. You do this by asking the OS, "is this thing a terminal?".
Python example
"terminal" if sys.stdout.isatty() else "something else"
C is very similar:
if (isatty (1))
fprintf (stdout, "Terminal.");
else
fprintf (stdout, "Not Terminal.");
(printf works, too).
- sokoloff 3y agoSure; the output format changes, but the functionality doesn't. Even ls outputs a tabular format by default when it's on a terminal and a list one file/dir per line when it's not on a terminal (if it's piped to cat for example or why ls | wc -l correctly counts the entries). But the (essential) behavior of the command remains the same. ls still lists files/dirs... scp still copies files, etc.
- indymike 3y ago> But the (essential) behavior of the command remains the same. Of course. A command needs to do it's defined function. You'll find some programs that are quite a bit different when invoked from outside the terminal vs inside the terminal. Developers need to take into account both situations, which is really the point the original post.
- saghm 3y agoYou can see this pretty easily with `ls` as well by using different options for the color. If you run `ls --color=auto`, you'll get colored output when running directly but black and white output if you pipe to `less`. However, if you pass `--color=always`, you'll get colored output when running directly and a bunch of garbage around some of the entries when piping to `less` because it doesn't interpret ANSI escape codes for color by default (although depending on what the output you're piping into `less` is, there are some workarounds like https://www.gnu.org/software/src-highlite/ https://www.gnu.org/software/src-highlite/)
- funcDropShadow 3y agoYou can use ls --color=always | less -R to render the colors in less.