Đó là tác dụng của MULTIOS .
echo foo >&2 | grep foo
sẽ viết foo
cho stderr và cũng ống foo
đến grep
. Vì stderr mặc định là terminal, bạn sẽ thấy hai foo
dòng, một từ echo
, một từ grep
kế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 foo
dò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 foo
dò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. grep
sẽ 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 nomultios
tùy chọn bỏ đặt:
$ unsetopt | grep nomultios
nomultios
Để tắt nó, chỉ cần đặt nomultios
tù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.