Khi bạn chạy:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Về cơ bản, bạn chỉ chuyển hướng đầu ra của Luồng 1 (tức là stdout
) sang /dev/null
.
Điều này tốt khi bạn muốn chuyển hướng đầu ra được tạo ra bởi sự thực thi bình thường của một chương trình. Tuy nhiên, trong trường hợp bạn cũng muốn chuyển hướng đầu ra do tất cả các lỗi, cảnh báo hoặc lỗi, bạn cũng nên chuyển hướng stderr
luồng hoặc Lỗi tiêu chuẩn sang /dev/null
.
Một cách để làm điều này là chuẩn bị số lượng luồng bạn muốn chuyển hướng đến toán tử chuyển hướng, >
như sau:Command 2> /dev/null
Do đó, lệnh của bạn sẽ giống như:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Nhưng, lưu ý rằng chúng tôi đã chuyển hướng một luồng đến /dev/null
. Tại sao không đơn giản là cõng trên cùng một chuyển hướng? Bash cho phép chúng ta làm điều này bằng cách chỉ định số luồng để chuyển hướng đến. 2>&1
.
Chú ý &
ký tự sau toán tử chuyển hướng. Điều này nói với shell rằng những gì xuất hiện tiếp theo không phải là tên tệp mà là định danh cho luồng đầu ra.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Hãy cẩn thận với các toán tử chuyển hướng, thứ tự của họ rất quan trọng. Nếu bạn chuyển hướng không đúng thứ tự, bạn sẽ có kết quả không mong muốn.
Một cách khác để bạn có thể đạt được sự im lặng hoàn toàn là bằng cách chuyển hướng tất cả các luồng đầu ra sang /dev/null
sử dụng phím tắt này: &>/dev/null
(hoặc chuyển hướng đến một tệp nhật ký với &>/path/to/file.log
).
Do đó, hãy viết lệnh của bạn là:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
nó được. Cảm ơn tất cả các bạn đã giúp đỡ ngay lập tức!