คุณจำไวยากรณ์ได้อย่างไรสำหรับการเปลี่ยนเส้นทาง 2> & 1 [ปิด]


12

คุณมีระบบช่วยในการจำหรือไม่? สิ่งนี้รบกวนฉันมาหลายปีฉันต้องค้นหามันเสมอ

คำตอบ:


19

หากคุณเป็นโปรแกรมเมอร์ C คุณสามารถนึกได้ว่า&1"ที่อยู่ 1" ดังนั้นให้2>&1อ่าน "descriptor ไฟล์เปลี่ยนเส้นทาง # 2 ไปยังตำแหน่งเดียวกับ # 1"


ไม่ทราบว่าช่วยได้หรือไม่ ... ความจำช่วยจำค่อนข้างเป็นเรื่องส่วนตัว
— lgeorget

+12 นั่นเป็นคำอธิบายที่ถูกต้องว่าเกิดอะไรขึ้น
— Stéphane Chazelas

1
ฉันสงสัยว่ามันเป็นความคิดของ ("ที่อยู่ 1") เมื่อมันถูกคิดค้น ในขณะที่บางคนสนับสนุนทั้งภาษา C และ UNIX อย่างหนักเมื่อพวกเขาถูกประดิษฐ์ขึ้นมันเป็นไปได้
— lgeorget

1
ฉันอาจเริ่มใช้อันนี้แทน;)
— goldilocks

3

"สองต่อหนึ่ง" ("ถึง" กำลัง>) ทำให้ฉันมีเหตุผลมากกว่าตรรกะ "สองและหนึ่ง" ซึ่งเป็นสิ่งที่ฉันมักจะสับสนกับ หากคุณพิจารณาว่า "และหนึ่ง" เป็นคำนามเดียว (สถานที่) มันก็ทำให้รู้สึกทางไวยากรณ์ในบริบทซึ่งเป็นเรื่องยากที่จะทำกับ "สองและหนึ่ง" - คุณจะต้องพิจารณา "หนึ่ง" คำนามและมันยังคงไม่สมเหตุสมผลตามบริบท


2
ฉันไม่เข้าใจ
— แมตต์

2

ไม่ใช่ตัวช่วยจำ แต่ฉันอ่านได้ดังนี้:

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

เมื่อคุณเขียน2>&1คุณกำลังพูดว่า "ข้อผิดพลาดมาตรฐานไปที่เอาต์พุตมาตรฐาน"

มาทำลายมันกันเถอะ

แรกที่คุณต้องการที่จะจดจำว่าข้อผิดพลาดมาตรฐานคือและผลผลิตมาตรฐานคือ21

ดังนั้นคุณมีบางสิ่งบางอย่างบางสิ่งบางอย่าง21

"จะไป" >เป็นลายลักษณ์อักษร

ดังนั้นคุณมีบางสิ่งบางอย่าง2>1

2>filenamefilenameวิธีการส่งข้อผิดพลาดมาตรฐาน 1แต่คุณไม่ต้องการที่จะส่งไปยังไฟล์ที่เรียกว่า คุณต้องการอย่างอื่น: จำนวนไฟล์ที่เปิดอยู่แล้ว นั่นคือสิ่งที่&มีไว้เพื่อ

2>&1ดังนั้น

นอกจากนี้คุณยังสามารถคิดว่ามันเหมือนคุณกำลังทำงานที่>เป็นเหมือนเท่ากับและ&เป็นเหมือน$การเปรียบเทียบ:

f=$1
2>&1

เพื่อทำความเข้าใจบรรทัดคำสั่งที่มีการเปลี่ยนเส้นทางหลายครั้งสิ่งสำคัญที่ควรทราบคือการเปลี่ยนเส้นทางจะทำจากซ้ายไปขวา ดูลำดับการเปลี่ยนเส้นทางสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนั้น


0

ฉันจำได้ว่ามันอยู่เสมอ 2 -> 1. Stderr ถึง stdout

ส่วนตรงกลางอยู่เสมอยากที่หนึ่งและฉันมักจะสับสนมันขึ้นมาจนผมจำได้ว่าครั้งแรกที่มาพร้อมตัวอักษรคมชัดแล้วตัวละครที่ผมไม่สามารถเขียนในชีวิตจริง>&

ดังนั้นไม่เคย2&>1เสมอ2>&1


0

หากคุณเข้าใจว่า FD2 เป็น STDERR คุณอาจคิดว่า "โอ้แล้วจับ STDERR ที่ฉันส่ง STDOUT (FD1)"


0

เพื่อนร่วมงานของฉันและฉันมักจะพูดว่า "ทั้งสองมีค่ามากกว่าหนึ่ง" เพราะส่วนใหญ่ของเราไม่เคยจำได้ว่าstderrเป็นไฟล์อธิบาย2และstdoutเป็น1(โดยเฉพาะอย่างยิ่งผู้ที่ใหม่กับ Unix / Linux) ดังนั้นการขนส่งอื่น ๆ เกี่ยวกับการเปลี่ยนเส้นทางstderrจะไม่ได้ทำงานจริงๆ . ปัญหาเดียวก็คือคุณยังต้องจำตำแหน่งที่เครื่องหมายและไป!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.