เมื่อคุณทำงาน:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
คุณจะได้เป็นหลักเพียงการเปลี่ยนเส้นทางการส่งออกของสตรีม 1 (คือstdout
) /dev/null
เพื่อ
สิ่งนี้ใช้ได้เมื่อคุณต้องการเปลี่ยนทิศทางเอาต์พุตที่สร้างขึ้นโดยการเรียกใช้งานปกติของโปรแกรม อย่างไรก็ตามในกรณีที่คุณยังต้องการที่จะเปลี่ยนเส้นทางออกที่เกิดจากข้อผิดพลาดทุกคำเตือนหรือความล้มเหลวคุณควรเปลี่ยนเส้นทางหรือกระแสข้อผิดพลาดมาตรฐานstderr
/dev/null
วิธีหนึ่งในการทำเช่นนี้คือการเพิ่มจำนวนสตรีมที่คุณต้องการเปลี่ยนเส้นทางไปยังผู้ให้บริการการเปลี่ยนเส้นทาง>
เช่นนี้Command 2> /dev/null
ดังนั้นคำสั่งของคุณจะมีลักษณะดังนี้:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
แต่โปรดสังเกตว่าเราได้เปลี่ยนเส้นทางไปหนึ่งสตรีมไป/dev/null
แล้ว ทำไมไม่เพียงแค่แบกลูกหมูบนการเปลี่ยนเส้นทางเดียวกัน Bash ช่วยให้เราสามารถทำได้โดยระบุหมายเลขสตรีมที่จะเปลี่ยนเส้นทาง 2>&1
.
สังเกตุ&
ตัวละครหลังตัวดำเนินการเปลี่ยนเส้นทาง สิ่งนี้บอกเชลล์ว่าสิ่งที่ปรากฏถัดไปไม่ใช่ชื่อไฟล์ แต่เป็นตัวบ่งชี้สำหรับเอาต์พุตสตรีม
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
ระวังตัวดำเนินการเปลี่ยนเส้นทางลำดับของพวกเขาสำคัญมาก หากคุณต้องเปลี่ยนเส้นทางในลำดับที่ไม่ถูกต้องคุณจะพบกับผลลัพธ์ที่ไม่คาดคิด
อีกวิธีหนึ่งที่คุณสามารถบรรลุความเงียบที่สมบูรณ์คือการเปลี่ยนเส้นทางกระแสข้อมูลทั้งหมดเพื่อ/dev/null
ใช้ทางลัดนี้: &>/dev/null
(หรือเปลี่ยนเส้นทางไปยังล็อกไฟล์ด้วย&>/path/to/file.log
)
ดังนั้นเขียนคำสั่งของคุณเป็น:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
มันเป็น ขอบคุณทุกท่านสำหรับความช่วยเหลือทันที!