Bir programın çıktısını yeniden yönlendirmenin ve hala stdout'a gitmesinin bir yolu var mı?


24

Tamam. Bir programın çıktısını bir dosyaya yönlendirmek isteseydim, böyle bir şey yapardım.

prog > file

Hem stdout'u hem de stderr'i bu dosyaya yönlendirmek istesem, yapardım

prog > file 2>&1

Çıktının dosyaya gitmesini istiyorsanız, bu her şey yolunda ve iyidir. Fakat çıktının dosyaya gitmesini ve yine de hala stdout / stderr'e gitmesini istiyorsanız? Böylece, çıktı dosyaya kaydedilir, ancak program çalışırken hala konsolda görebilirsiniz. Bunu yapmanın bir yolu var mı? Ve eğer öyleyse, nasıl?


Terminoloji: Demek istediğin ve hala terminale gittiğin . stdoutdosya tanıtıcısı 1'dir ve foo > some_fileüzerinde açılan salt yazılabilir dosya tanıtıcısının some_filefoo stdout olduğu anlamına gelir . stdout her zaman stdout'a gider.
— Peter Cordes

Yanıtlar:


39

teebu amaç için var; bir dosya adı argümanı alır ve okuduğu verileri stdin'den hem stdout'a hem de dosyaya yazar:

$ prog 2>&1 | tee file

10
Ve ekstra bash 4 zekâ için: prog |& tee file.
— Tobu

1
Ayrıca 'dosya'yı' isimli bir kanalla değiştirebilirsiniz ...
— Kevin Cantu

@KevinCantu: Adlandırılmış bir boru yalnızca bir tür dosyadır; bu, her şeyin bir dosya olduğu Unix'tir. Ayrıca prog |& tee /dev/tty > file, bir boru hattının ortasında yararlı olabilecek, örneğin foo |& tee /dev/tty | sed 's/.*\r//' > foo.logterminalinizdeki durum satırı ilerleme güncellemelerini görmek, ancak bunları bir günlük dosyasından filtreleyebilirsiniz. Veya, bu noktada verileri görmenizi sağlayarak birlikte keseceğiniz bir boru hattında hata ayıklamak için kullanın.
— Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.