Câu trả lời:
Với zsh và với mult_ios
tùy chọn bật (theo mặc định), trong:
echo hi 2>&1 1>/dev/null | cat
Điều 1> /dev/null | cat
này được xem như là một sự chuyển hướng nhiều lần của echo
thiết bị xuất chuẩn.
Vì vậy, echo
thiết bị xuất chuẩn hiện được chuyển hướng đến cả hai /dev/null
và một đường ống đến cat
(như thể đang sử dụng tee
).
Để hủy nhiều chuyển hướng đó, bạn có thể làm:
echo hi 2>&1 >&- > /dev/null | cat
Đó là, đóng stdout (hủy đường ống) trước khi chuyển hướng đến /dev/null
Hoặc sử dụng một nhóm lệnh hoặc subshell như:
{echo hi 2>&1 1>/dev/null} | cat
(echo hi 2>&1 1>/dev/null) | cat
Theo cách đó, echo
thiết bị xuất chuẩn chỉ được chuyển hướng rõ ràng một lần (chuyển hướng đường ống được áp dụng cho nhóm / lớp con và được kế thừa bởi echo
).
Hoặc bạn có thể vô hiệu hóa multios
hoàn toàn:
(setopt nomultios; echo hi 2>&1 > /dev/null | cat)
Ngoài ra, bạn có thể sử dụng thay thế quá trình thay vì đường ống:
echo hi 2> >(cat) > /dev/null
Tuy nhiên, hãy cẩn thận khi tắt điều khiển công việc (như trong tập lệnh), cat
quy trình sẽ được chạy không đồng bộ (như thể bắt đầu với &
).
{echo...}|cat
)
(echo hi 2>&1 1>/dev/null) | cat
.