ลองแบ่ง>> /dev/null 2>&1
คำสั่งออกเป็นส่วน ๆ :
ส่วนที่ 1: การ >>
เปลี่ยนเส้นทางเอาต์พุต
ใช้เพื่อเปลี่ยนทิศทางเอาต์พุตของโปรแกรมและผนวกเอาต์พุตที่ท้ายไฟล์ มากกว่า...
ตอนที่ 2: /dev/null
ไฟล์พิเศษ
นี้เป็นอุปกรณ์ที่ Pseudo แฟ้มพิเศษ
คำสั่งls -l /dev/null
จะให้รายละเอียดของไฟล์นี้:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
คุณสังเกตcrw
ไหม ซึ่งหมายความว่าเป็นไฟล์อุปกรณ์หลอกซึ่งเป็นประเภทไฟล์ตัวอักษรพิเศษที่ให้การเข้าถึงแบบอนุกรม
/dev/null
ยอมรับและทิ้งอินพุตทั้งหมด; ไม่สร้างเอาต์พุต (ส่งคืนการบ่งชี้สิ้นสุดไฟล์เสมอเมื่ออ่าน) อ้างอิง: Wikipedia
ส่วนที่ 3: 2>&1
ตัวอธิบายไฟล์
เมื่อใดก็ตามที่คุณรันโปรแกรมระบบปฏิบัติการเสมอเปิดสามไฟล์เข้ามาตรฐานส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานที่เรารู้ว่าเมื่อใดก็ตามที่มีเปิดแฟ้มระบบปฏิบัติการ (จากเคอร์เนล ) ผลตอบแทนเป็นจำนวนเต็มไม่เป็นลบเรียกว่าอธิบายไฟล์ file descriptor สำหรับไฟล์เหล่านี้คือ 0, 1 และ 2 ตามลำดับ
ดังนั้น2>&1
เพียงแค่บอกว่าเปลี่ยนข้อผิดพลาดมาตรฐานไปยังเอาต์พุตมาตรฐาน
&
หมายความว่าอะไรก็ตามดังต่อไปนี้เป็นตัวบ่งชี้ไฟล์ไม่ใช่ชื่อไฟล์
ในระยะสั้นโดยใช้คำสั่งนี้คุณจะบอกโปรแกรมของคุณไม่ต้องตะโกนขณะดำเนินการ
ความสำคัญของการใช้2>&1
คืออะไร?
หากคุณไม่ต้องการผลิตเอาต์พุตใด ๆ แม้ในกรณีที่เกิดข้อผิดพลาดบางอย่างในเครื่อง หากต้องการอธิบายให้ชัดเจนยิ่งขึ้นลองพิจารณาตัวอย่างต่อไปนี้:
$ ls -l > /dev/null
สำหรับคำสั่งด้านบนจะไม่มีการพิมพ์เอาต์พุตในเทอร์มินัล แต่จะทำอย่างไรถ้าคำสั่งนี้ก่อให้เกิดข้อผิดพลาด:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
แม้ฉันจะเปลี่ยนเส้นทางไปที่/dev/null
มันจะถูกพิมพ์ใน terminal เป็นเพราะเราไม่ได้เปลี่ยนเส้นทางข้อผิดพลาดไปยัง/dev/null
ดังนั้นเพื่อเปลี่ยนเส้นทางข้อผิดพลาดออกเช่นกันก็ต้องเพิ่ม2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
วิธีสั้นสมรกระบวนการคือ