Saat mengotomatiskan tugas, masuk akal untuk mengujinya terlebih dahulu secara manual. Akan sangat membantu, jika ada data yang pergi ke stderr langsung dapat dikenali, dan dapat dibedakan dari data yang akan stdout, dan untuk memiliki semua output bersama sehingga jelas apa urutan kejadiannya.
Satu sentuhan terakhir yang akan menyenangkan adalah jika, saat keluar dari program, ia mencetak kode pengembaliannya.
Semua hal ini akan membantu dalam mengotomatisasi. Ya, saya bisa mengulangi kode kembali ketika sebuah program selesai, dan ya, saya bisa mengarahkan stdout dan stderr; apa yang saya benar-benar suka itu beberapa shell, script, atau redirector yang mudah digunakan yang menunjukkan stdout dalam warna hitam, menunjukkan stderr disisipkan dengan warna merah, dan mencetak kode keluar di akhir.
Apakah ada binatang seperti itu? [Jika itu penting, saya menggunakan Bash 3.2 di Mac OS X].
Pembaruan : Maaf sudah berbulan-bulan sejak saya melihat ini. Saya datang dengan skrip tes sederhana:
#!/usr/bin/env python
import sys
print "this is stdout"
print >> sys.stderr, "this is stderr"
print "this is stdout again"
Dalam pengujian saya (dan mungkin karena cara buffered), rse dan hilite menampilkan semuanya dari stdout dan kemudian semuanya dari stderr. Metode fifo mendapatkan urutan yang benar tetapi tampaknya mewarnai semua yang mengikuti garis stderr. ind mengeluh tentang garis stdin dan stderr saya, dan kemudian menempatkan output dari stderr terakhir.
Sebagian besar solusi ini bisa diterapkan, karena tidak biasa hanya untuk output terakhir pergi ke stderr, tapi tetap saja, akan menyenangkan untuk memiliki sesuatu yang bekerja sedikit lebih baik.
Jawaban:
Anda juga dapat melihat stderred: https://github.com/sickill/stderred
sumber
Saya baru saja menemukan metode gila yang melibatkan FIFO.
Jika Anda ingin output stderr terpisah, Anda dapat membuka dua shell terpisah dan menjalankan "
grep --color . foo
" di satu tanpa&
, kemudian jalankan perintah di yang lain (masih dengan2>foo
). Anda akan mendapatkan stderr di yanggrep
satu dan stdout di yang utama.Ini berfungsi karena output stderr dialihkan melalui FIFO ke
grep --color
, yang warna defaultnya merah (setidaknya untuk saya). Setelah selesai, cukuprm
FIFO (rm foo
).Peringatan : Saya benar-benar tidak yakin bagaimana ini akan menangani pesanan keluaran, Anda harus mengujinya.
sumber
Ya, ini mungkin. Lihatlah bagian "Jadikan STDERR merah" di situs ini untuk contoh yang berfungsi.
Kode dasarnya adalah ini
Penjelasan singkat diberikan dalam fungsi itu sendiri. Apa yang dilakukan adalah memindahkan STDOUT dan STDERR tentang, jadi sed mendapatkan STDERR dalam 1, warna itu, dan kemudian menukarnya kembali. Pikirkan aliran file 3 sebagai variabel temp di sini.
Panggilannya cukup sederhana
Namun, doa tertentu tidak akan berfungsi seperti yang diharapkan; peringatan semua disediakan di halaman yang terhubung.
Btw, saya pikir itu juga mungkin untuk datang dengan solusi bentuk
di mana rse akan mewarnai output.
Saya juga menemukan proyek hilite ini yang tampaknya melakukan ini. Saya belum mencobanya, tapi mungkin itu yang Anda cari.
Proyek terkait lainnya:
sumber
Program lain adalah ind:
http: // www.habets.pp.se/synscan/programs.php?prog=ind (Anda harus merakit sendiri tautannya, saya tidak punya cukup poin untuk lebih dari satu per jawaban). Ada screenshot dan bahkan screencast di sana.
Ini menjalankan subproses dalam pty, yang lain mungkin tidak. Ini bisa menjadi masalah di mana urutan penting (sering kali demikian), karena stderr segera dibilas di terminal dan stdout sepenuhnya buffer ketika itu bukan tty.
Untuk penjelasan lengkap, lihat ini: http://blog.habets.pp.se/2008/06/Buffering-in-pipes
Juga, ind bekerja dengan program interaktif dan karakter kontrol. Bash bekerja seperti biasa ketika dimulai dengan "ind bash -i".
Ini bisa berfungsi untuk memberi Anda warna sambil mempertahankan Ctrl-P et.al.
sumber
Ini ada banyak respons untuk menyoroti keluaran stderr. Saya hanya dapat menambahkan satu cukup mudah - dalam satu baris, yang Anda lampirkan ke perintah:
Tetapi Anda harus menambahkan ini setelah perintah setiap kali.
Saya, secara pribadi, menyukai kemungkinan yang disebutkan oleh @nagul, fungsi rse ditambahkan ke bashrc.
Tetapi saya ingin menambahkan solusi untuk mencetak kode keluar. Anda dapat menambahkan nilai ini ke awal baris bash prompt Anda:
Di mana EC adalah kode keluar dari perintah.
Saya sudah mengatur di jalan, bahwa ketika kode keluar adalah 0, itu tidak akan dicetak, tetapi nilai lainnya dicetak sebelum prompt berikutnya dalam warna merah.
Seluruh trik dilakukan di ~ / .bashrc:
Baris prompt secara default ditentukan oleh variabel PS1. Salin apa pun yang Anda miliki di sini ke PROMPT variabel dan kemudian buat variabel PS1 dengan atau tanpa kode keluar.
Bash akan menampilkan informasi dalam variabel PS1 di prompt.
sumber
ada
annotate-output
utilitas (devscripts
paket Debian), jika Anda ingin melakukannya tanpa warnasumber