ฉันต้องการคำอธิบายสั้น ๆ ของบรรทัดคำสั่งต่อไปนี้:
grep -i 'abc' content 2>/dev/null
ฉันต้องการคำอธิบายสั้น ๆ ของบรรทัดคำสั่งต่อไปนี้:
grep -i 'abc' content 2>/dev/null
คำตอบ:
ตัวดำเนินการ> จะเปลี่ยนเส้นทางผลลัพธ์ไปที่ไฟล์ แต่สามารถไปที่อุปกรณ์ได้ คุณสามารถใช้ >> เพื่อต่อท้าย
หากคุณไม่ได้ระบุตัวเลขระบบจะถือว่าสตรีมเอาต์พุตมาตรฐาน แต่คุณสามารถเปลี่ยนเส้นทางข้อผิดพลาดได้
> fileเปลี่ยนเส้นทาง stdout ไปยังไฟล์
1> fileเปลี่ยนเส้นทาง stdout ไปยังไฟล์
2> fileเปลี่ยนเส้นทาง stderr ไปยังไฟล์
&> fileเปลี่ยนเส้นทาง stdout และ stderr ไปยังไฟล์
/dev/nullเป็นอุปกรณ์ว่างเปล่าที่จะรับอินพุตใด ๆ ที่คุณต้องการและโยนมันทิ้ง มันสามารถใช้ในการปราบปรามการส่งออกใด ๆ
2>&1จะมีไวยากรณ์ที่เก่ากว่าดังนั้น&>จะไม่ได้ทำงานหลายปีที่ผ่านมา แต่ทั้งสองจะเทียบเท่ากัน
ในระยะสั้นมันเปลี่ยนเส้นทางstderr(fd 2) ไปที่หลุมดำ (ยกเลิกการส่งออกของคำสั่ง)
กรณีการใช้งานทั่วไปบางอย่างสำหรับการเปลี่ยนเส้นทาง:
command > /dev/null 2>&1 &
ทำงานcommandในพื้นหลังทิ้งstdoutและstderr
command >> /path/to/log 2>&1 &
รันcommandและต่อท้าย stdout และ stderr ไปยังไฟล์บันทึก
ใน Bash 4+ รูปแบบที่สั้นกว่า (แต่อ่านง่ายกว่า) นั้นใช้งานได้
command &>> /path/to/log
> /dev/null 2>&1แทน&> /dev/nullหรือไม่
&>เป็นของใหม่ใน Bash 4 อดีตเป็นเพียงวิธีดั้งเดิมฉันคุ้นเคยกับมันมาก (จำได้ง่าย)
&> /dev/nullอาจไม่ทำงานในบางส่วน แต่เปลือกหอย> / dev / null 2> & 1 จะทำงานในทุกเปลือกหอยที่เข้ากันได้ POSIX
fn>targetที่fnเป็นหมายเลขไฟล์ (0-2 โดยทั่วไปบางโปรแกรมกำหนดหมายเลขเพิ่มเติม) และtargetมักจะเป็นชื่อไฟล์ แต่ที่นี่มันเป็น filenumber อื่น - นำหน้าด้วย&ซึ่งเป็น ไวยากรณ์สำหรับ "ฉันต้องการชื่อไฟล์แทนชื่อไฟล์"
/dev/nullถือว่าเป็นหลุมดำใน Linux / Unix ดังนั้นคุณสามารถใส่อะไรลงไปในสิ่งนี้ได้ แต่คุณจะไม่สามารถนำมันกลับมา/dev/nullได้
ยิ่งไปกว่านั้น2>หมายความว่าคุณกำลังเปลี่ยนเส้นทาง (เช่น>) stderr (ie 2) ลงในหลุมดำ (เช่น/dev/null)
คำสั่งของคุณคือ:
grep -i 'abc' content 2>/dev/null
อย่าพยายามปิดท้ายด้วยเครื่องหมายทับหน้าอื่นเช่นนี้ - 2>/dev/null/(ไม่ใช่ไดเรกทอรี)
เนื้อหา grep -i 'abc' จะสร้างผลลัพธ์ที่แสดงบนคอนโซลของคุณรวมถึงข้อผิดพลาดใด ๆ
การระบุ2>/dev/nullจะกรองข้อผิดพลาดออกเพื่อไม่ให้ส่งออกไปยังคอนโซลของคุณ
รายละเอียดเพิ่มเติม: 2 แสดงถึงตัวบ่งชี้ข้อผิดพลาดซึ่งเป็นที่ที่ข้อผิดพลาดจะถูกเขียนไป โดยค่าเริ่มต้นพวกเขาจะพิมพ์ออกมาบนคอนโซล
\> เปลี่ยนเส้นทางเอาต์พุตไปยังตำแหน่งที่ระบุในกรณีนี้ /dev/null
/dev/null เป็นอุปกรณ์ Linux มาตรฐานที่คุณส่งเอาต์พุตที่คุณต้องการละเว้น
> /dev/null 2>&1และ&> /dev/null