Có thể chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang cùng một dòng mangle?


8

Tôi đã đọc rằng khi chuyển hướng stdoutstderrđến cùng một tệp bằng cách sử dụng 2>&1, stdoutthường được chặn trong khi không có bộ đệm stderr.

Nếu một dòng rất dài được ghi vào stdout, yêu cầu hai lần đệm riêng biệt, liệu có thể xảy ra một dòng từ stderrtrượt ở giữa không? Một cái gì đó như thế này:

stdout:   aaaaaaaa.....really long line......aaaaaaaaaaaa<newline>

stderr:   eee<newline>

combined: aaaaaaaaaaaaaaaaeee<newline>
          aaaaaaa<newline>

Câu trả lời:


7

Vâng, chính xác điều đó có thể xảy ra nếu các dòng stdoutđủ dài.

#!/usr/bin/perl
use strict;
use warnings;

for (1..10) {
    print "START"; print "-" x 100000; print "END\n";
    warn "!\n";
}

Đang chạy:

./writer.pl > out 2>&1

Kiểm tra: Mở tệp outtrong trình chỉnh sửa và tìm stderr !ở giữa -, không phải luôn luôn ở giữa ENDSTART

Điều này sẽ khác nhau giữa các hệ điều hành: ngôn ngữ và hệ thống theo nhiều cách khác nhau, nhưng giả định cơ bản của bạn là chính xác. Thử nghiệm bởi chiều dài của stdout-dòng khác nhau: print "-" x 100, print "-" x 10000, vv

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.