บางครั้งเมื่อคัดลอกวางข้อความจากผลของคำสั่งที่ฉันจะตั้งใจใช้Ctrl+ cแทนCtrl+ +Shiftc
ดังนั้นบรรทัดคำสั่งตีความมันเป็น^C
...
ทำไมนี้ ทำไมบรรทัดคำสั่งตีความcontrolการป้อนข้อมูลเป็น^
?
บางครั้งเมื่อคัดลอกวางข้อความจากผลของคำสั่งที่ฉันจะตั้งใจใช้Ctrl+ cแทนCtrl+ +Shiftc
ดังนั้นบรรทัดคำสั่งตีความมันเป็น^C
...
ทำไมนี้ ทำไมบรรทัดคำสั่งตีความcontrolการป้อนข้อมูลเป็น^
?
คำตอบ:
ไม่ได้แทรกลำดับอักขระ "^ C" จริง ๆ นี่เป็นเพียงการแสดงสำหรับอักขระควบคุม ASCII ที่ไม่สามารถพิมพ์ได้เช่น:
^C
→ ETX (สิ้นสุดข้อความส่งสัญญาณ kill), ASCII 0x03^D
→ EOT (สิ้นสุดการส่งสัญญาณ, ยุติอินพุต), ASCII 0x04^H
→ BS (Backspace, \b
), ASCII 0x08^J
→ LF (ป้อนบรรทัด\n
), ASCII 0x0A^L
→ FF (ฟีดฟอร์มหน้าใหม่ล้างเทอร์มินัล) ASCII 0x0C^M
→ CR (Carriage return, \r
), ASCII 0x0Dนี่เป็นเพียงตัวแยกขนาดเล็กของอักขระควบคุม ASCII ที่เป็นไปได้ที่สามารถแทรกโดยใช้แป้นพิมพ์ คุณสามารถค้นหารายการเต็มรูปแบบที่นี่
ผมคิดว่าคนที่สำคัญที่สุดที่ต้องจำไว้เป็นCtrl+ C, Ctrl+ Dและ+CtrlL
เนื่องจากCTRL+ KEYคอมโบถูกตีความโดยเทอร์มินัลว่าเป็นอักขระ ASCII ที่ไม่สามารถพิมพ์ได้และการที่ไม่สามารถพิมพ์ได้คุณจำเป็นต้องมีวิธีในการแสดง
การประชุมกั้นจากขั้ว VT ด้วยการสนับสนุน ANSIคือการเป็นตัวแทนของCTRL+ KEYคำสั่งผสมที่เป็นตัวแทนCTRLที่มีเครื่องหมาย ( ^
) และมีKEYKEY
เมื่อคัดลอกและวางไปยัง / จากเทอร์มินัลวิธีที่ดีที่สุดคือใช้ทางลัดCtrl+ InsertและShift+ Insertตามลำดับ
สิ่งเหล่านี้เป็นทางลัดแบบดั้งเดิมสำหรับการใช้เทอร์มินัลแม้ว่าคุณจะทราบว่าในสภาพแวดล้อมแบบกราฟิก X Ctrl+ InsertและShift+ Insertจะเชื่อมโยงกับCtrl+ CและCtrl+ Vเดียวกัน
ในเทอร์มินัลส่วนใหญ่Ctrl+ C(แสดงโดย^C
) ถูกใช้เพื่อหยุดการดำเนินการของกระบวนการดังนั้นการวางด้วยการลัดสั้น ๆ นั้นจะไม่ทำงาน
สำหรับการคัดลอกและวางอย่างรวดเร็วคุณสามารถใช้บัฟเฟอร์หลักของ X โดยเน้นข้อความที่คุณต้องการคัดลอกแล้วคลิกกลางที่คุณต้องการวาง ไม่ต้องใช้แป้นพิมพ์
^C
หรือสตริงที่คล้ายกันปรากฏขึ้นเมื่อกด CTRL + C (หรือ CTRL + ตัวอักษรอื่น) มันไม่เกี่ยวกับวิธีการคัดลอกและวางข้อมูลในเทอร์มินัลอย่างถูกต้องซึ่งคำตอบของคุณจะยอดเยี่ยม
คุณควรใช้Ctrl+ Cไม่ใช่Shift+ Ctrl+ Cเพราะบนบรรทัดคำสั่งพวกเขาทำสิ่งเดียวกัน (และCtrl+ Cง่ายกว่าShift+ Ctrl+ C) นั่นอาจไม่เป็นจริงในสภาพแวดล้อมแบบกราฟิกบางอย่างที่ GUI จับการกดแป้นบางตัวและทำสิ่งที่พิเศษ แต่ถ้าการกดแป้นถูกส่งไปยังบรรทัดคำสั่งอย่างแท้จริงจะไม่มีความแตกต่าง นี่คือเหตุผลที่การกดCtrl+ Cอาจแสดง ^ C เป็นตัวพิมพ์ใหญ่ C แทนตัวพิมพ์เล็ก C บรรทัดคำสั่งทำให้ไม่มีความแตกต่างกับสิ่งที่คุณกด นี่เป็นเรื่องจริงสำหรับตัวอักษร สำหรับตัวละครอื่น ๆShiftอาจมีผลกระทบ)
การกดCtrl- Cส่งรหัส ASCII ที่อยู่ต่ำกว่าตำแหน่งอักษรตัวพิมพ์ใหญ่ 64 ตัวในตาราง ASCII (และน้อยกว่าตำแหน่งอักษรตัวพิมพ์เล็ก 96 ตัวในตาราง ASCII) ดังนั้นการกดCtrl- c(ตัวพิมพ์เล็ก) จะส่งรหัส ASCII 3 (ซึ่งเป็น 64 น้อยกว่าCรหัส ASCII ของทุนที่ 67) ในหลาย ๆ สภาพแวดล้อมคุณสามารถAltกดค้างไว้แล้วกดปุ่ม3บนแป้นตัวเลข (จากนั้นปล่อย3แป้นแล้วปล่อยAltแป้น) และคุณอาจได้รับผลกระทบเดียวกัน
สำหรับ ^ C ^ เป็นเพียงชวเลขที่รู้จักกันดีสำหรับCtrlคีย์ "" ในทำนองเดียวกัน M- เป็นชวเลขสำหรับAltคีย์ "" เอ่อใช่ M ย่อมาจากคำว่า "Meta" ซึ่งสามารถป้อนได้โดยAltการกดและกดอะไรก็ตามที่เกิดขึ้นถัดไปหรือบางครั้งก็กดEsc(และปล่อยEsc) แล้วกดอะไรก็ตามที่เข้ามา บทความของ Wikipedia ในหัวข้อ "คีย์ควบคุม": "สัญลักษณ์"อธิบายถึงสิ่งนี้ว่า "สัญลักษณ์ดั้งเดิม" สิ่งนี้เป็นที่รู้จักกันในชื่อ Caret Notation ( บทความ Wikipedia เกี่ยวกับสัญกรณ์ Caret , Unix StackExchange: คำถามของ ryvnf เกี่ยวกับ Caret Notation )
เกี่ยวกับคำถามสุดท้ายเชลล์คำสั่งไม่ใช่ "ตีความ" สิ่งใด ๆ ที่เป็นคาเร็ต กล่าวอีกนัยหนึ่งเชลล์ไม่ได้อ่านอะไรเลยและเชื่อว่ามันเป็นคาเร็ต สิ่งที่เกิดขึ้นคือเชลล์ใช้เครื่องหมายรูปหมวกที่รู้จักกันดีในการส่งออก เป็นอีกตัวอย่างหนึ่งคุณสามารถดูเพจเจอร์ที่รู้จักกันดี "น้อยลง" ใช้เครื่องหมายรูปหมวกด้วยการรัน:dd if=/dev/zero bs=64 count=1 | less
(โปรแกรมแก้ไขข้อความ "นาโน" ยังใช้เครื่องหมายรูปหมวกในการช่วยเหลือแบบออนไลน์รวมถึงหน้าจอเต็มรูปแบบของวิธีใช้ออนไลน์ที่แสดงหลังจากกด ^ G, aka Ctrl- g.)
^
เป็นสัญลักษณ์สำหรับ "การควบคุม" ย้อนหลังไปถึงยุคก่อนกราฟิกเมื่อเทอร์มินัลเป็นข้อความเท่านั้นและฉันเชื่อว่าแม้กระทั่งก่อนหน้านั้นเมื่อเรามีการ์ดและกระดาษ ฉันชอบที่จะรู้ว่าทำไมเครื่องหมายรูปหมวกจึงถูกเลือกให้เป็นสัญลักษณ์