Chuyển hướng xuất chuẩn từ hai chương trình


9

Tôi đang chạy một công cụ kiểm tra bộ nhớ (prog1) trên mã C ++ (prog2), cả hai đều cung cấp cho tôi một đầu ra rất lớn và chi tiết. Để loại bỏ một số lỗi tôi cần lưu kết quả đầu ra này vào một tệp.

Tôi đã thử chuyển hướng thiết bị xuất chuẩn sang một tệp:

prog1 prog2 > outfile.txt

Nhưng điều đó mang lại cho tôi một tệp chứa đầu ra của prog2, trong khi đầu ra của prog1 vẫn đang đi đến thiết bị đầu cuối.

Bất cứ ai cũng biết một cách để xác định rằng tôi muốn các đầu ra CẢM đi đến một tệp? Giống như (prog1 prog2) > outfile.txt?

Câu trả lời:


19

Có một cơ hội tốt đó prog1là viết đầu ra của nó thành lỗi tiêu chuẩn. Bạn có thể chuyển hướng cả hai đầu ra thành một tệp với

prog1 prog2 > outfile.txt 2>&1

hoặc bạn có thể chia đầu ra với

prog1 prog2 > outfile.txt 2> errors.txt

Điều này không tách rời đầu ra của các chương trình riêng lẻ , nó tách các kênh đầu ra. Xem các toán tử điều khiển và chuyển hướng của shell là gì? để biết chi tiết.

Nếu bạn xem prog1tài liệu của bạn, bạn có thể tìm thấy một tùy chọn để bảo nó lưu trữ đầu ra của nó trong một tệp có tên thay thế. Ví dụ: với strace,

strace -o strace.txt prog2 > outfile.txt

sẽ lưu trữ straceđầu ra strace.txtvà mọi thứ được ghi vào đầu ra tiêu chuẩn outfile.txt.


5
2>&1phải đi sau > outfile.txt . Thứ tự các vấn đề chuyển hướng.
Barmar 17/12/18

Lưu ý cho độc giả tương lai: @Barmar hoàn toàn chính xác rằng thứ tự tương đối của các chuyển hướng có liên quan đến nhau. Đối với những người ít quen thuộc, thứ tự chuyển hướng liên quan đến các đối số chương trình chỉ quan trọng trong một vài trường hợp. Điểm đầu và điểm cuối là những vị trí phổ biến, nhưng đôi khi cũng xảy ra giữa (xin đừng làm điều này). echo >&2 hello worldtương đương với echo hello world >&2. Thêm thông tin ở đây: tldp.org/LDP/abs/html/io-redirection.html
Morgen
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.