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.