Home » Questions » Computers [ Ask a new question ]

Can the output of one command be piped to two other commands?

Can the output of one command be piped to two other commands?

How can I pipe the output of one command to the input of two other commands simultaneously?

Asked by: Guest | Views: 322
Total answers/comments: 1
Guest [Entry]

"It sounds like the tee command will do what you want.

The key is to use

>( )

for process substitution. With tee, use the following pattern:

tee >(proc1) >(proc2) >(proc3) | proc4

So if you wanted to use the output of ls as input to two different grep programs, save the output of each grep to different files, and pipe all of the results through less, try:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

The results of the ls -A will be ""piped"" into both greps. The file hidden-files will have the contents from the output of the first grep, and normal-files will have the results of the second grep. All of the files will be shown in the pager less. EDIT: what you see in less is the same exact output of ls -A, not the result of the greps. If you want to modify the output from ls -A to less, (e.g. swapping the order so normal files are listed before hidden ones) then try this:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Without >/dev/null, the output of greps would be appended to the output of ls -A instead of replacing it.

source"