Làm thế nào để tôi chuyển hướng chỉ stderr?


13

Tôi có một chút rắc rối khi làm điều này. Tôi được yêu cầu chạy tệp .java đã biên dịch và chỉ chuyển hướng stderr sang tệp có tên là lỗi. Vì vậy, tệp .java được đặt tên là javaProgram.java.

Đây là những gì tôi đã thử:

java javaProgram 2> error

Tuy nhiên khi tôi

cat error

Dường như có những thứ trong đó, ngay cả khi tôi biết rằng thực tế là tệp .java cụ thể không có lỗi. Tôi có làm điều gì sai? Tất cả tôi muốn tập tin lỗi này hiển thị là lỗi, không phải bất cứ điều gì khác.

Câu trả lời:


16

Lần thử đầu tiên của bạn là chính xác; 2>filenamelà cách bạn chuyển hướng stderr. Nó có thể là trường hợp chương trình của bạn đang viết một số lỗi không thành lỗi cho stderr hoặc chương trình java đang chạy các chương trình khác xuất ra stderr.


1

Câu trả lời đơn giản là không thể. Lỗi tiêu chuẩn được sử dụng để ghi đầu ra chẩn đoán và tùy thuộc vào ứng dụng để xác định đầu ra chẩn đoán / lỗi là gì. Đó là theo tiêu chuẩn POSIX .


2
Nếu bạn định trích dẫn thông số POSIX, vui lòng trích dẫn một phần cụ thể chứ không phải toàn bộ tài liệu. Nó rất lớn.
jordanm

Từ khi nào không thể chuyển hướng stderr sang tệp trong POSIX? Bạn sẽ phải cung cấp một báo giá thực tế cho điều đó.
l0b0

1
@ l0b0 đó không phải là những gì Jeight đang nói. Tùy thuộc vào các ứng dụng để quyết định những gì đi đến STDOUT và những gì đi đến STDERR; ví dụ, hoàn toàn có thể chuyển mọi thứ vào STDOUT, và sau đó chuyển hướng STDERR sẽ không có hiệu lực. Hoặc, như trong trường hợp này, có thể (và thông lệ tiêu chuẩn) có thể đưa một số điều không nghiêm trọng vào STDERR. Cách duy nhất có thể phân tích các lỗi từ các chẩn đoán khác là nếu các lỗi được đánh dấu bằng 'LRI:' hoặc một cái gì đó. Có thể có một công tắc dài có thể giúp đỡ, nhưng đó là chương trình cụ thể.
evilsoup

OP đặt ra hai vấn đề khác nhau về ngữ nghĩa: "chỉ chuyển hướng stderr sang một tệp gọi là lỗi" và "Tôi muốn tệp lỗi này hiển thị là lỗi, không phải bất cứ điều gì khác." Phần đầu tiên của điều đó chắc chắn là không thể, là quan điểm của tôi.
l0b0

@ l0b0 Bạn đã có nó ngược. OP chắc chắn có thể chuyển hướng stderr đến một tệp gọi là lỗi. Anh ta không thể chọn những gì Java xuất ra là stderr vì nội dung của stderr được kiểm soát bởi ứng dụng chứ không phải người dùng. Những gì anh ta có thể làm là grep tệp mà stderr đã được chuyển cho các thông báo lỗi thực tế.
Jeight
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.