อะไรเป็นสาเหตุให้คัดลอก / วางในเทอร์มินัลเพื่อเรียกใช้คำสั่งในบางครั้ง


24

เมื่อคุณวางคำสั่งบางรายการในเทอร์มินัลบางครั้งมันจะดำเนินการคำสั่งโดยอัตโนมัติ (เช่นถ้ากดปุ่ม "Enter") บางครั้งก็ไม่

ฉันใช้ลีนุกซ์มาหลายปี, วางคำสั่งหลายพันคำในคอนโซลต่าง ๆ บน distros หลาย ๆ อัน, และฉันยังไม่สามารถบอกได้ว่าคำสั่งที่ฉันจะวางจะถูกดำเนินการโดยอัตโนมัติหรือไม่

อะไรเป็นสาเหตุของพฤติกรรมนี้


5
หากคุณต้องการที่จะหลีกเลี่ยงความกังวลเกี่ยวกับเรื่องนี้ชนิด{ (w / พื้นที่) }ก่อนที่จะวางแล้วจบลงด้วย มันไม่มีผลกับการทำงานของคำสั่งที่วาง แต่ป้องกันเชลล์จากการดำเนินการจนกว่าคุณจะปิดบล็อก อธิบายไว้ที่นี่ [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]
loa_in_

คำตอบ:


37

นี่คือตัวอักษรคืนในข้อความที่คุณกำลังคัดลอกซึ่งทำให้เกิดการดำเนินการอัตโนมัติ

ลองตัวอย่างอื่นคัดลอกบรรทัดเหล่านี้ทั้งหมดในคราวเดียวและวางลงในเทอร์มินัลของคุณ:

echo "Hello";
echo "World";

หากคุณดูใน terminal ของคุณคุณจะไม่เห็นสิ่งนี้:

$ echo "Hello";
echo "World";

คุณจะเห็นสิ่งนี้ (อาจมีสายพูดด้วยWorld):

$ echo "Hello";
Hello
$ echo "World";

แทนที่จะรอให้อินพุตทั้งหมดถูกวางไว้บรรทัดแรกจะเรียกใช้งาน (และด้วยเหตุผลเดียวกันบรรทัดที่สองอาจหรือไม่ก็ได้เช่นกัน) นี่เป็นเพราะมีRETURNอักขระระหว่างสองบรรทัด

เมื่อคุณกดENTERปุ่มบนแป้นพิมพ์สิ่งที่คุณกำลังทำอยู่ก็คือการส่งตัวอักษรที่มีค่า ASCII 13เป็น เทอร์มินัลของคุณตรวจพบตัวละครนั้นทันทีและรู้ว่ามันมีคำแนะนำพิเศษในการดำเนินการสิ่งที่คุณได้พิมพ์ไปแล้ว

เมื่อเก็บไว้ในคอมพิวเตอร์ของคุณหรือพิมพ์บนหน้าจอRETURNตัวละครจะเหมือนกับตัวอักษรอื่น ๆ ของตัวเลขหรือสัญลักษณ์ ตัวละครนี้สามารถลบได้ด้วย backspace หรือคัดลอกไปยังคลิปบอร์ดเหมือนกับตัวละครอื่น ๆ ทั่วไป

ความแตกต่างเพียงอย่างเดียวคือเมื่อเบราว์เซอร์ของคุณเห็นตัวอักษรมันรู้ดีว่าแทนที่จะพิมพ์ตัวอักษรที่มองเห็นได้มันควรปฏิบัติต่อมันแตกต่างกันและมีคำแนะนำพิเศษเพื่อย้ายชุดข้อความถัดไปลงในบรรทัดถัดไป RETURNตัวอักษรและSPACEตัวอักษร (ASCII 32) พร้อมกับไม่กี่ตัวอักษรที่ไม่ค่อยมีใครใช้อื่น ๆ ที่เป็นที่รู้จักกันในนาม "อักขระที่ไม่ใช่พิมพ์" เพราะเหตุนี้

บางครั้งเมื่อคุณคัดลอกข้อความจากเว็บไซต์มันเป็นการยากที่จะคัดลอกเฉพาะข้อความและไม่ใช่การส่งคืนที่สิ้นสุด


เวลาทดลอง!

ด้านล่างนี้คุณจะพบคำสั่งสองคำที่จะแสดงปัญหาและคุณสามารถ "ฝึกฝน" ได้ เริ่มเคอร์เซอร์ของคุณทันทีechoและลากจนกว่าไฮไลต์จะอยู่ตรงหน้าลูกศร:

echo "Wait for my signal...";<- End cursor here right after the semicolon

และตอนนี้ลองคำสั่งที่สอง เริ่มเคอร์เซอร์ของคุณทันทีechoและลากลงจนกว่าเคอร์เซอร์จะอยู่บนบรรทัดที่สอง แต่อยู่ด้านหน้าของ<-ลูกศร คัดลอกแล้ววางลงในเทอร์มินัลของคุณ:

echo 'Go go go!';
<- End cursor here right before the arrow

อาจไม่สามารถมองเห็นได้ว่าข้อความที่คุณเลือกมีสองบรรทัดขึ้นอยู่กับเบราว์เซอร์ของคุณ แต่เมื่อคุณวางลงในเทอร์มินัลคุณจะพบว่ามันรันบรรทัดเพราะมันพบRETURNตัวละครในข้อความที่คัดลอก


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

space เป็นตัวละครที่พิมพ์
mikeserv

1
บางที. อย่างไรก็ตามเมื่อฉันทดสอบการวางจาก Firefox ลงในเชลล์ (ด้วย stty ที่ตั้งค่าเป็น "raw") บรรทัดจะจบลงด้วยการขึ้นบรรทัดใหม่ - ไม่ใช่ carriage return
Thomas Dickey

1
คุณไม่จำเป็นต้องย้ายไปที่บรรทัดถัดไปหากคุณเลือกและย้ายเซมิโคลอนในจำนวนที่เพียงพอ (2-3 ตัวอักษร) มันจะเลือกทั้งแถวซึ่งหมายความว่าคุณได้ขึ้นบรรทัดใหม่

@ThomasDickey คุณใช้ Windows หรือระบบที่ใช้ Unix หรือไม่
IQAndreas

10

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

ในบางระบบ (เช่นระบบที่ใช้เทอร์มินัลซิงโครนัสเช่น IBM 3270) Enterคีย์จะ "ตรวจสอบความถูกต้อง" หน้าจอโดยคัดลอกการเปลี่ยนแปลงทั้งหมดไปยังโฮสต์



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