Mengarahkan stdout dari dua program

9

Saya menjalankan alat pemeriksaan memori (prog1) pada kode C ++ (prog2), yang keduanya memberi saya output yang besar dan terperinci. Untuk mengejar beberapa bug saya perlu menyimpan output ini ke file.

Saya mencoba mengarahkan stdout ke file:

prog1 prog2 > outfile.txt

Tapi itu memberi saya file yang berisi output dari prog2, sedangkan output dari prog1 masih pergi ke terminal.

Adakah yang tahu cara untuk menentukan bahwa saya ingin KEDUA output untuk pergi ke file? Suka (prog1 prog2) > outfile.txt?

FJC
sumber

Jawaban:

19

Ada peluang bagus untuk prog1menulis outputnya ke standard error. Anda dapat mengarahkan kedua output ke satu file dengan

prog1 prog2 > outfile.txt 2>&1

atau Anda dapat membagi output dengan

prog1 prog2 > outfile.txt 2> errors.txt

Ini tidak memisahkan output masing-masing program , itu memisahkan saluran keluaran. Lihat Apa saja kontrol shell dan operator redirection? untuk detail.

Jika Anda melihat prog1dokumentasi, Anda mungkin menemukan opsi untuk mengatakannya untuk menyimpan hasilnya dalam file bernama. Misalnya, dengan strace,

strace -o strace.txt prog2 > outfile.txt

akan menyimpan stracekeluaran 's di strace.txt, dan segala sesuatu yang ditulis ke output standar di outfile.txt.

Stephen Kitt
sumber
5
2>&1harus mengejar > outfile.txt . Urutan pengalihan masalah.
Barmar
Catatan untuk pembaca di masa mendatang: @Barmar benar sekali bahwa urutan relatif pengalihan penting satu sama lain. Bagi mereka yang kurang terbiasa, urutan pengalihan sehubungan dengan argumen program hanya penting dalam beberapa kasus. Awal dan akhir adalah lokasi umum, tetapi tengah kadang-kadang terjadi juga (tolong jangan lakukan ini). echo >&2 hello worldsetara dengan echo hello world >&2. Info lebih lanjut di sini: tldp.org/LDP/abs/html/io-redirection.html
Morgen