Đó là tác dụng của MULTIOS .
echo foo >&2 | grep foo
sẽ viết foocho stderr và cũng ống foođến grep. Vì stderr mặc định là terminal, bạn sẽ thấy hai foodòng, một từ echo, một từ grepkết quả.
{ echo foo >&2 | grep foo } >/dev/null
Ở đây, bạn đã thấy một dòng vì thiết bị xuất chuẩn được chuyển hướng đến /dev/null, bạn chỉ thấy foodòng từ echo.
{ echo foo >&2 | grep foo } 2>/dev/null
Ở đây, bạn đã thấy một dòng vì stderr được chuyển hướng đến /dev/null, bạn chỉ thấy foodòng từ grep.
Bạn có thể dễ dàng thấy sự khác biệt trong thiết bị đầu cuối bằng màu đầu ra của dòng. grepsẽ làm nổi bật mẫu phù hợp (hoặc bạn có thể buộc nó bằng cách sử dụng --color=always).
MULTIOSđược bật theo mặc định với nomultiostùy chọn bỏ đặt:
$ unsetopt | grep nomultios
nomultios
Để tắt nó, chỉ cần đặt nomultiostùy chọn:
$ setopt nomultios
{echo foo >&2} | grep foo, nếu bạn thấy những gì tôi đang cố gắng nói. Tôi nghĩ rằng lệnh tôi đã hỏi ở trên sẽ chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn và sau đó chuyển thiết bị xuất chuẩn trống sang grep.