Linux/Debian - What does 'pee' in moreutils do?

Here's what you can do with pee:

seq 5 -1 1 > file
cat file |pee 'sort -u > sorted' 'sort -R > unsorted'

So pee works with shell pipes instead of files.

bash doesn't need pee, it can open shell commands as files:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)

It's probably easier to understand if you've used tee first. This useful old tool takes standard input and writes out to multiple files, plus standard output. The following:

echo "Hello world" | tee one two

Will create two files, named one and two, both containing the string Hello world. It will also print to your terminal.


Now pee performs a similar function but instead of redirecting output to multiple files it redirects to multiple secondary commands, ala pipes. It differs slightly from tee in the respect that it doesn't send the original stdin to stdout because it wouldn't make sense combining it with the output of the secondary commands. The following very simple example:

echo "Hello world" | pee cat cat

Will output the string Hello world to your terminal twice. This is because each of the two instances of cat receives the standard output and does what cat does, which is print.