Tentukan apakah output stdout atau stderr

22

Bagaimana saya bisa menentukan apakah proses keluaran adalah stdout atau stderr?

Bongkar
sumber

Jawaban:

22

Hanya ada tiga cara yang saya tahu untuk menentukan program apa yang akan dihasilkan ke STDOUT dan apa yang harus STDERR

  1. Baca dokumentasinya. Atau

  2. Percobaan dengan pengalihan †

  3. cetak STDERR dengan warna merah

†Sebagai contoh:

program > program.stdout 2> program.stderr

Kemudian lihat dua file output untuk melihat apa yang ditulis oleh program untuk STDOUT dan apa yang telah ditulis untuk STDERR.

Alih-alih pengalihan Anda dapat pipa ke teejika Anda perlu output untuk melanjutkan ke layar serta menjadi file. Lihat /programming//q/692000/477035

RedGrittyBrick
sumber
15
Saya biasanya menggunakan variasi opsi 3: program | grep .mencetak STDOUT dengan warna merah.
Dennis
Mencetak dengan warna merah persis seperti yang saya cari. Terima kasih RedGrittyBrick & Dennis
Rauffle
7

Berdasarkan permintaan komentar Anda:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
zebediah49
sumber
3
Terlihat mengesankan. Tetapi apakah Anda keberatan untuk menambahkan ceri ke pohon Anda, dan menjelaskan apa yang dilakukannya? Tidak semua orang di sini adalah guru - dan konstruk Anda cukup rumit;)
Izzy
Tanda kurung adalah untuk memesan. Saya benar-benar mendapatkan bentuk yang tepat dari I-forget-where, tetapi intinya adalah menggunakan deskriptor file tambahan (di luar 1 = stdoutdan 2 = stderr) untuk mengambil output dari set kurung dalam, dan dijalankan stdoutmelalui satu sedperintah, sementara stderrmelewati yang berbeda.
zebediah49
Wow. Tidak tahu menggunakan deskriptor ekstra itu. Pertama saya agak bingung (saya suka mengerti apa yang saya jalankan - dan agak bingung dengan kurung kurawal). Tapi sekarang sudah jelas - dan IMHO persis apa yang diinginkan OP. Jadi +1 dari saya :)
Izzy
Ini membantu saya. Saya ingin menambahkan lebih banyak data ke stderr. Ini melakukan itu dan dengan benar menampilkan semuanya kembali di stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery
0

Anda bisa mengarahkan ulang stderr ke file dan jika ada yang muncul di dalamnya, itu dari stderr.

misalnya ls -a 2> ls-all.txt

jika ada kesalahan karena alasan apa pun yang dikirim ke stderr, itu akan diarahkan ke file ini.

magna_nz
sumber
-1

Jika Anda ingin melakukan ini sekali saja, arahkan salah satunya di tempat lain.

Contoh, mengarahkan standar keluar dengan >.

ls -al> ls-l.txt (output apa pun di sini bukan dari stdout, jika Anda melihat sesuatu itu pasti output stderr)

Untuk penggunaan redirection stderr 2>

Hennes
sumber
Proses menciptakan aliran output konstan, beberapa untuk stdout beberapa ke stderr. Saya ingin menentukan yang mana sebagai output ini akan ke layar
Rauffle