Xác định xem đầu ra là thiết bị xuất chuẩn hay thiết bị xuất chuẩn


22

Làm thế nào tôi có thể xác định xem những gì một quá trình xuất ra là thiết bị xuất chuẩn hay thiết bị xuất chuẩn?

Câu trả lời:


22

Chỉ có ba cách tôi biết để xác định chương trình nào sẽ xuất ra STDOUT và những gì để STDERR

  1. Đọc tài liệu. Hoặc là

  2. Thử nghiệm với chuyển hướng

  3. in STDERR màu đỏ

†Ví dụ:

program > program.stdout 2> program.stderr

Sau đó nhìn vào hai tệp đầu ra để xem chương trình đã viết gì cho STDOUT và những gì nó đã ghi vào STDERR.

Thay vì chuyển hướng, bạn có thể chuyển sang teenếu bạn cần đầu ra để tiếp tục màn hình cũng như vào một tệp. Xem /programming//q/692000/477035


15
Tôi thường sử dụng một biến thể của tùy chọn 3: program | grep .in STDOUT bằng màu đỏ.
Dennis

In màu đỏ là khá nhiều chính xác những gì tôi đang tìm kiếm. Cảm ơn RedGrittyBrick & Dennis
Rauffle

7

Dựa trên yêu cầu bình luận của bạn:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
Trông thật ấn tượng. Nhưng bạn có phiền khi thêm anh đào vào cây của bạn, và giải thích những gì nó đang làm? Không phải tất cả mọi người ở đây đều là một đạo sư - và cấu trúc của bạn khá phức tạp;)
Izzy

Các dấu ngoặc là để đặt hàng. Tôi thực sự đã nhận được mẫu chính xác đó từ I-quên-where, nhưng vấn đề là sử dụng các mô tả tệp bổ sung (ngoài 1 = stdoutvà 2 = stderr) để lấy đầu ra của bộ dấu ngoặc trong và chạy stdoutqua một sedlệnh, trong khi stderrđi qua một cái khác
zebediah49

Ồ Không biết sử dụng những mô tả thêm đó. Đầu tiên tôi có một chút bối rối (tôi muốn hiểu những gì tôi chạy - và có một chút bối rối với các dấu ngoặc nhọn). Nhưng bây giờ thì rõ ràng - và IMHO chính xác những gì OP muốn. Vì vậy, +1 từ tôi :)
Izzy

Điều này đã giúp tôi. Tôi muốn thêm nhiều dữ liệu vào stderr. Điều này thực hiện điều đó và đầu ra đúng mọi thứ trở lại trên thiết bị xuất chuẩn / thiết bị xuất chuẩn. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery

0

Bạn chỉ có thể chuyển hướng stderr đến một tệp và nếu có bất cứ điều gì xuất hiện trong đó, thì đó là từ stderr.

ví dụ ls -a 2> ls-all.txt

nếu có lỗi vì bất kỳ lý do nào được gửi đến stderr, nó sẽ được chuyển hướng đến tệp này.


-1

Nếu bạn muốn làm điều này một lần, hãy chuyển hướng một trong số chúng ở nơi khác.

Ví dụ, chuyển hướng tiêu chuẩn ra với >.

ls -al> ls-l.txt (bất kỳ đầu ra nào ở đây không phải từ thiết bị xuất chuẩn, nếu bạn thấy bất cứ điều gì thì đó phải là đầu ra stderr)

Đối với sử dụng chuyển hướng stderr 2>


Quá trình tạo ra một dòng đầu ra không đổi, một số để xuất hiện một số để stderr. Tôi muốn xác định cái nào là đầu ra này sẽ xuất hiện trên màn hình
Rauffle
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.