Mike
Mike

Reputation: 60839

unix shell, redirect output but keep on stdin

I'd like to have a shell script redirect stdout of a child process in the following manner

  1. Redirect stdout to a file
  2. Display the output of the process in real time

I know I could do something like

#!/bin/sh

./child > file
cat file

But that would not display stdout in real time. For instance, if the child was

#!/bin/sh

echo 1
sleep 1
echo 2

The user would see "1" and "2" printed at the same time

Upvotes: 4

Views: 1412

Answers (2)

ebal
ebal

Reputation: 375

I use: sponge, from moreutils http://linux.die.net/man/1/sponge

you can do something like that:

$ grep something largefile | sponge largefile

Upvotes: -1

R Samuel Klatchko
R Samuel Klatchko

Reputation: 76611

Use tee:

./child | tee file

tee will copy its standard input to any file on the command line and to standard output as well.

Upvotes: 14

Related Questions