คุณมีระบบช่วยในการจำหรือไม่? สิ่งนี้รบกวนฉันมาหลายปีฉันต้องค้นหามันเสมอ
คุณมีระบบช่วยในการจำหรือไม่? สิ่งนี้รบกวนฉันมาหลายปีฉันต้องค้นหามันเสมอ
คำตอบ:
หากคุณเป็นโปรแกรมเมอร์ C คุณสามารถนึกได้ว่า&1"ที่อยู่ 1" ดังนั้นให้2>&1อ่าน "descriptor ไฟล์เปลี่ยนเส้นทาง # 2 ไปยังตำแหน่งเดียวกับ # 1"
"สองต่อหนึ่ง" ("ถึง" กำลัง>) ทำให้ฉันมีเหตุผลมากกว่าตรรกะ "สองและหนึ่ง" ซึ่งเป็นสิ่งที่ฉันมักจะสับสนกับ หากคุณพิจารณาว่า "และหนึ่ง" เป็นคำนามเดียว (สถานที่) มันก็ทำให้รู้สึกทางไวยากรณ์ในบริบทซึ่งเป็นเรื่องยากที่จะทำกับ "สองและหนึ่ง" - คุณจะต้องพิจารณา "หนึ่ง" คำนามและมันยังคงไม่สมเหตุสมผลตามบริบท
ไม่ใช่ตัวช่วยจำ แต่ฉันอ่านได้ดังนี้:
0คือ stdin
1คือ stdout
2เป็น stderr
>กำลังเข้า
<อยู่นอก
&เป็น file descriptor (ในบางเชลล์)
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
มันอาจเปลี่ยนไปถ้าคุณทำ messed กับ file descriptor ใด ๆ ก่อนที่จะเปลี่ยนเส้นทาง ...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
เมื่อคุณเขียน2>&1คุณกำลังพูดว่า "ข้อผิดพลาดมาตรฐานไปที่เอาต์พุตมาตรฐาน"
มาทำลายมันกันเถอะ
แรกที่คุณต้องการที่จะจดจำว่าข้อผิดพลาดมาตรฐานคือและผลผลิตมาตรฐานคือ21
ดังนั้นคุณมีบางสิ่งบางอย่างบางสิ่งบางอย่าง21
"จะไป" >เป็นลายลักษณ์อักษร
ดังนั้นคุณมีบางสิ่งบางอย่าง2>1
2>filenamefilenameวิธีการส่งข้อผิดพลาดมาตรฐาน 1แต่คุณไม่ต้องการที่จะส่งไปยังไฟล์ที่เรียกว่า คุณต้องการอย่างอื่น: จำนวนไฟล์ที่เปิดอยู่แล้ว นั่นคือสิ่งที่&มีไว้เพื่อ
2>&1ดังนั้น
นอกจากนี้คุณยังสามารถคิดว่ามันเหมือนคุณกำลังทำงานที่>เป็นเหมือนเท่ากับและ&เป็นเหมือน$การเปรียบเทียบ:
f=$1
2>&1
เพื่อทำความเข้าใจบรรทัดคำสั่งที่มีการเปลี่ยนเส้นทางหลายครั้งสิ่งสำคัญที่ควรทราบคือการเปลี่ยนเส้นทางจะทำจากซ้ายไปขวา ดูลำดับการเปลี่ยนเส้นทางสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนั้น
ฉันจำได้ว่ามันอยู่เสมอ 2 -> 1. Stderr ถึง stdout
ส่วนตรงกลางอยู่เสมอยากที่หนึ่งและฉันมักจะสับสนมันขึ้นมาจนผมจำได้ว่าครั้งแรกที่มาพร้อมตัวอักษรคมชัดแล้วตัวละครที่ผมไม่สามารถเขียนในชีวิตจริง>&
ดังนั้นไม่เคย2&>1เสมอ2>&1
หากคุณเข้าใจว่า FD2 เป็น STDERR คุณอาจคิดว่า "โอ้แล้วจับ STDERR ที่ฉันส่ง STDOUT (FD1)"
เพื่อนร่วมงานของฉันและฉันมักจะพูดว่า "ทั้งสองมีค่ามากกว่าหนึ่ง" เพราะส่วนใหญ่ของเราไม่เคยจำได้ว่าstderrเป็นไฟล์อธิบาย2และstdoutเป็น1(โดยเฉพาะอย่างยิ่งผู้ที่ใหม่กับ Unix / Linux) ดังนั้นการขนส่งอื่น ๆ เกี่ยวกับการเปลี่ยนเส้นทางstderrจะไม่ได้ทำงานจริงๆ . ปัญหาเดียวก็คือคุณยังต้องจำตำแหน่งที่เครื่องหมายและไป!