Bagaimana cara mengarahkan ulang hanya stderr?

13

Saya mengalami sedikit kesulitan melakukan ini. Saya diminta untuk menjalankan file .java yang dikompilasi dan mengarahkan ulang hanya stderr ke file yang disebut kesalahan. Jadi file .java bernama javaProgram.java.

Inilah yang saya coba:

java javaProgram 2> error

Namun ketika saya

cat error

tampaknya ada hal-hal di sana, bahkan ketika saya tahu pasti bahwa file .java tertentu tidak memiliki kesalahan. Apakah saya melakukan sesuatu yang salah? Yang saya inginkan agar file kesalahan ini ditampilkan adalah kesalahan, bukan yang lainnya.

John
sumber

Jawaban:

16

Percobaan pertama Anda benar; 2>filenameadalah bagaimana Anda mengarahkan stderr. Mungkin saja program Anda menulis beberapa non-error ke stderr, atau program java menjalankan program lain yang menghasilkan stderr.

Tandai Plotnick
sumber
1

Jawaban sederhananya adalah itu tidak mungkin. Kesalahan standar digunakan untuk menulis keluaran diagnostik dan terserah pada aplikasi untuk menentukan apa yang dimaksud dengan keluaran diagnostik / kesalahan. Itu sesuai dengan standar POSIX .

Jeight
sumber
2
Jika Anda akan mengutip spesifikasi POSIX, harap sebutkan bagian tertentu dan bukan keseluruhan dokumen. Itu besar.
jordanm
Sejak kapan tidak mungkin untuk mengarahkan stderr ke file dalam POSIX? Anda harus memberikan penawaran aktual untuk itu.
l0b0
1
@ l0b0 bukan itu yang dikatakan Jeight. Terserah aplikasi untuk memutuskan apa yang pergi ke STDOUT dan apa yang pergi ke STDERR; akan sangat mungkin untuk mendorong semuanya menjadi STDOUT, misalnya, dan mengarahkan ulang STDERR tidak akan berpengaruh. Atau, seperti dalam kasus ini, dimungkinkan (dan praktik standar) untuk memasukkan beberapa hal yang tidak sepenuhnya kesalahan ke dalam STDERR. Satu-satunya cara untuk mengurai kesalahan dari diagnostik lain adalah jika kesalahan ditandai dengan 'ERROR:' atau sesuatu. Mungkin ada saklar verbositas yang bisa membantu, tapi itu khusus program.
evilsoup
OP mengajukan dua masalah yang secara semantik berbeda: "mengarahkan ulang hanya stderr ke file yang disebut kesalahan" dan "Saya ingin file kesalahan ini ditampilkan adalah kesalahan, bukan yang lain." Bagian pertama dari itu tentu bukan tidak mungkin, maksud saya.
l0b0
@ l0b0 Anda mendapatkannya mundur. OP pasti dapat mengarahkan stderr ke file bernama error. Dia tidak dapat memilih output Java apa sebagai stderr karena konten stderr dikendalikan oleh aplikasi dan bukan pengguna. Apa yang bisa dia lakukan adalah grep file yang stderr diteruskan ke pesan kesalahan aktual.
Jeight