Câu trả lời:
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
Đọc tài liệu. Hoặc là
Thử nghiệm với chuyển hướng
†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 tee
nế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
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: /'
stdout
và 2 = stderr
) để lấy đầu ra của bộ dấu ngoặc trong và chạy stdout
qua một sed
lệnh, trong khi stderr
đi qua một cái khác
{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&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>
program | grep .
in STDOUT bằng màu đỏ.