Tentukan apakah output stdout atau stderr


22

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

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


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: /'

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.


-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>


Proses menciptakan aliran output konstan, beberapa untuk stdout beberapa ke stderr. Saya ingin menentukan yang mana sebagai output ini akan ke layar
Rauffle
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.