Stdout'u iki programdan yeniden yönlendirme


9

Her ikisi de bana büyük ve ayrıntılı bir çıktı vermek bir C ++ kodu (prog2), bir bellek kontrol aracı (prog1) çalıştırıyorum. Bazı hataları kovalamak için bu çıktıyı bir dosyaya kaydetmem gerekiyor.

Stdout'u bir dosyaya yönlendirmeyi denedim:

prog1 prog2 > outfile.txt

Ama bu bana prog2 çıktısını içeren bir dosya verirken, prog1 çıktısı hala terminale gidiyor.

Herkes ben hem çıktıların bir dosyaya gitmek istiyorum belirtmek için bir yol biliyor musunuz? Gibi (prog1 prog2) > outfile.txtmi?

Yanıtlar:


19

Çıktısını prog1standart hataya yazmanın iyi bir şansı var . Her iki çıkışı da tek bir dosyaya yeniden yönlendirebilirsiniz.

prog1 prog2 > outfile.txt 2>&1

veya çıkışları

prog1 prog2 > outfile.txt 2> errors.txt

Bu, programların çıktılarını ayırmaz , çıktı kanallarını ayırır. Bkz . Kabuğun kontrol ve yönlendirme operatörleri nelerdir? detaylar için.

prog1Belgelerine bakarsanız, çıktısını bunun yerine adlandırılmış bir dosyada saklamasını söyleme seçeneği bulabilirsiniz. Örneğin, ile strace,

strace -o strace.txt prog2 > outfile.txt

straceçıktısını depolar strace.txtve her şey standart çıktıya yazılır outfile.txt.


5
2>&1peşinden gitmek zorunda > outfile.txt. Yönlendirme sırası önemlidir.
Barmar

Gelecekteki okuyucular için not: @Barmar, göreli yönlendirme sırasının birbirine göre önemli olduğu konusunda kesinlikle doğrudur. Daha az tanıdık olanlar için, program argümanlarına göre yönlendirme sırası sadece birkaç durumda önemlidir. Başlangıç ​​ve bitiş ortak yerlerdir, ancak orta bazen de olur (lütfen bunu yapmayın). echo >&2 hello worldeşittir echo hello world >&2. Daha fazla bilgi için: tldp.org/LDP/abs/html/io-redirection.html
Morgen
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.