Bagaimana cara menyalurkan aliran kesalahan standar tanpa memompa aliran keluar standar?
Saya tahu perintah ini berfungsi, tetapi juga menuliskan standarnya.
Command 2>&1 | tee -a $LOG
Bagaimana saya mendapatkan kesalahan standar saja?
Catatan: Apa yang saya inginkan dari ini adalah hanya menulis stream stderr ke log dan menulis stderr dan stdout ke konsol.
tee.exe
diinstal :)Perintah Kyle's Unix / Linux melakukan tugas mengganti STDERR dengan STDOUT; Namun penjelasannya kurang tepat. Operator pengarah ulang tidak melakukan penyalinan atau penggandaan, mereka hanya mengarahkan aliran ke arah yang berbeda.
Menulis ulang perintah Kyle dengan memindahkan sementara 3> & 1 ke akhir, akan membuatnya lebih mudah untuk memahami konsep:
Ditulis dengan cara ini, Linux akan menampilkan kesalahan karena & 3 belum ada karena terletak sebelum 3> & 1. 3> sesuatu adalah cara untuk menyatakan (menetapkan) bahwa kita akan menggunakan pipa ketiga, jadi itu harus ditempatkan sebelum kita mengalirkan air ke pipa itu, misalnya cara Kyle menulisnya. Coba cara lain ini hanya untuk bersenang-senang:
Tidak memiliki cara untuk melakukan salinan adalah memalukan. Anda tidak dapat melakukan hal-hal seperti "3> & 1 3> & 2" dalam perintah yang sama, karena Linux hanya akan menggunakan yang pertama ditemukan dan menolak yang kedua.
Saya belum (belum) menemukan cara untuk mengirim kesalahan dan output reguler ke file dan juga mengirim salinan kesalahan ke output standar dengan satu perintah. Untuk instace, saya memiliki tugas cron yang saya inginkan baik output (kesalahan dan standar) pergi ke file log dan biarkan kesalahan juga keluar untuk membuat pesan email yang dikirim ke blackBerry saya. Saya bisa melakukannya dengan dua perintah menggunakan "tee" tetapi kesalahan tidak muncul dalam urutan yang benar di antara garis keluaran reguler dalam file. Ini adalah cara jelek saya menyelesaikan masalah:
Perhatikan bahwa saya harus menggunakan log1 dua kali dan saya harus menambahkan dalam kedua kasus, yang pertama menggunakan opsi "-a" untuk perintah "tee" dan yang kedua menggunakan ">>".
Melakukan cat log1 Anda mendapatkan yang berikut:
Perhatikan bahwa kesalahan tidak muncul di baris kedua sebagaimana mestinya.
sumber
mult_ios
opsi (diaktifkan secara default) untuk dapat mengarahkan FD beberapa kali.menurut halaman manual untuk ksh (pdksh), Anda bisa melakukan:
Perintah 2> & 1> / dev / null | kucing -n
yaitu dup stderr ke stdout, redirect stdout ke / dev / null, lalu pipa ke 'cat -n'
bekerja pada pdksh di sistem saya:
sumber
Saya menjalankannya seperti yang Anda inginkan karena saya juga membutuhkannya dan memperbaiki perintah Anda. sekarang bagi saya ini berfungsi dengan benar menggunakan bash 3.2 pada debian squeeze menggunakan ini
sedangkan log1 log stdout dan stderr dan log2 hanya log stderr dan tidak ada lagi yang dimasukkan ke layar.
sumber