bash, là một shell , có 2 luồng bạn có thể chuyển hướng dữ liệu đầu ra đó: stdout và stderr, bởi vì đầu ra này cần được chuyển hướng ở đâu đó, linux có một nút 'loại bỏ mọi thứ' cụ thể có thể truy cập thông qua / dev / null . Tất cả mọi thứ bạn gửi ở đó sẽ biến mất vào khoảng trống.
(shell cũng có một luồng đầu vào nhưng tôi sẽ bỏ qua điều này ở đây vì bạn đã yêu cầu triệt tiêu đầu ra)
Các luồng này được biểu thị bằng các số: 1 cho thiết bị xuất chuẩn và 2 cho thiết bị xuất chuẩn.
Vì vậy, nếu bạn muốn chuyển hướng chỉ ra thiết bị xuất chuẩn, bạn sẽ làm điều đó với các toán tử <
và >
toán tử (về cơ bản nơi nó trỏ đến là nơi dữ liệu chảy đến)
giả sử chúng tôi muốn chặn thiết bị xuất chuẩn (chuyển hướng đến / dev / null):
psql db -f sql.sql > /dev/null
Như bạn có thể thấy đây là thiết bị xuất chuẩn là mặc định, không có số luồng nào được sử dụng nếu bạn muốn sử dụng số luồng bạn viết
psql db -f sql.sql 1> /dev/null
Bây giờ nếu bạn muốn chặn stderror (luồng số 2), bạn sẽ sử dụng
psql db -f sql.sql 2> /dev/null
Bạn cũng có thể chuyển hướng một luồng này sang luồng khác, ví dụ như stderror sang stdout, rất hữu ích nếu bạn muốn lưu tất cả đầu ra ở đâu đó, thường xuyên và lỗi.
psql db -f sql.sql 2>&1 > log.txt
nhớ rằng bạn không thể có khoảng cách giữa 2>&1
Cuối cùng và đôi khi thú vị nhất là việc bạn có thể triệt tiêu tất cả đầu ra bằng cách sử dụng &>
, khi bạn muốn nó 'hoàn toàn yên tĩnh'
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
phải làm cho nó luôn giết đầu ra.