Bạn có thể đặt một chuyển hướng vào một danh sách các lệnh:
{
command1
command2
} >/dev/null
Nếu lúc nào đó trong kịch bản mà bạn không muốn bất kỳ đầu ra từ lệnh tiếp theo, bạn có thể chuyển hướng sản lượng của vỏ với exec
dựng sẵn:
echo interesting
exec >/dev/null
echo boring
Lưu ý rằng điều này kéo dài cho đến khi kết thúc của kịch bản, không chỉ cho đến cuối của một hàm. Điều này sẽ chăm sóc các lệnh sau khi một trong những thú vị nhưng không phải trước đây.
Có cách để hoàn nguyên tác dụng của exec /dev/null
, bằng cách sử dụng thao tác mô tả tệp. Mặc dù vậy, tôi không nhất thiết phải giới thiệu nó, bởi vì nó có thể phức tạp để làm việc trong thực tế. Ý tưởng là để di chuyển bất cứ điều gì được kết nối với đầu ra tiêu chuẩn cho một bộ mô tả khác nhau, sau đó chuyển hướng đầu ra tiêu chuẩn sang một tệp khác và cuối cùng chuyển vị trí đầu ra ban đầu trở lại đầu ra tiêu chuẩn.
{
exec 3>&1 # duplicate fd 3 to fd 1 (standard output)
exec >/dev/null # connect standard output to /dev/null
echo boring
exec 1>&3 # connect standard output back to what was saved in fd 3
echo interesting
exec >/dev/null # connect standard output to /dev/null again
echo more boring
} 3>/dev/null # The braced list must have its fd 3 connected somewhere,
# even though nothing will actually be written to it.
'r = $ (a); echo $ r' có thể được thay thế bằng chỉ' a'. –