Một lệnh tar bình thường
tar cvf foo.tar ./foo >foo.out 2>foo.err
có ba luồng IO đầu ra
- lưu trữ dữ liệu vào foo.tar
- danh sách tên tệp thành STDOUT (chuyển hướng vào foo.out)
- thông báo lỗi tới STDERR (được chuyển hướng vào foo.err)
Sau đó tôi có thể kiểm tra foo.err để tìm thông báo lỗi mà không cần phải đọc qua danh sách tên tệp.
nếu tôi muốn làm gì đó với dữ liệu lưu trữ (chuyển nó qua netcat hoặc chương trình nén đặc biệt), tôi có thể sử dụng -f -
tùy chọn tar do đó
tar cvf - ./foo 2>foo.err | squish > foo.tar.S
Nhưng bây giờ, danh sách tên tệp của tôi được trộn lẫn với các thông báo lỗi của tôi vì -v
đầu ra của tar rõ ràng không thể chuyển đến STDOUT (đó là nơi lưu trữ dữ liệu lưu trữ) vì vậy tar đã khéo léo viết nó vào STDERR.
Sử dụng Korn shell, có một cách để xây dựng một lệnh chuyển luồng lưu trữ sang một lệnh khác nhưng vẫn thu được -v
đầu ra riêng biệt với bất kỳ thông báo lỗi nào.
tee
không? Đây có vẻ như là một trường hợp sử dụng khá hợp lệ cho nó.