W porządku. Gdybym chciał przekierować wyjście programu do pliku, zrobiłbym coś takiego
prog > file
Gdybym chciał przekierować zarówno stdout, jak i stderr do tego pliku, zrobiłbym to
prog > file 2>&1
To wszystko dobrze i dobrze, jeśli chcesz, aby dane wyjściowe trafiły do pliku. Ale co, jeśli chcesz, aby dane wyjściowe trafiły do pliku, a jednak nadal do stdout / stderr? Dane wyjściowe są zapisywane w pliku, ale nadal można je zobaczyć w konsoli podczas działania programu. Czy jest na to sposób? A jeśli tak, to w jaki sposób?
shell
io-redirection
Jonathan M. Davis
źródło
źródło
stdout
jest deskryptorem pliku 1 ifoo > some_file
oznacza, że otwarty deskryptor pliku tylko do zapisusome_file
jest standardowym wyjściem foo. stdout zawsze idzie na stdout.Odpowiedzi:
tee
istnieje w tym celu; pobiera argument nazwy pliku i zapisuje dane, które odczytuje ze standardowego wejścia, zarówno do standardowego pliku, jak i do pliku:źródło
prog |& tee file
.prog |& tee /dev/tty > file
, co może być przydatne w środku potoku, np.foo |& tee /dev/tty | sed 's/.*\r//' > foo.log
Zobaczyć aktualizacje postępu linii statusu na twoim terminalu, ale odfiltrować je z pliku dziennika. Lub użyj go do debugowania potoku, który razem hakujesz, pozwalając zobaczyć dane w tym momencie.