หมายเหตุบางประการเกี่ยวกับSTTYคำสั่งประวัติเพื่อชี้แจงความไม่ถูกต้องบางอย่างในคำตอบอื่น ๆ และความคิดเห็นที่เกี่ยวข้อง :
เทอร์มินัลก่อนหน้านี้เช่นDEC VT05หรือVT50และเครื่องเคลื่อนย้ายมวลสารก่อนหน้านั้นรองรับเฉพาะอักขระตัวพิมพ์ใหญ่เท่านั้น สิ่งที่หมายถึงคือไม่มีอักขระตัวพิมพ์เล็กที่ไม่สามารถป้อนจากพวกเขาหรือว่าพวกเขาจะไม่สามารถแสดงตัวอักษรอื่น ๆ กว่าตัวอักษรตัวพิมพ์ใหญ่
Unix เป็นแบบตัวพิมพ์เล็กและคำสั่งส่วนใหญ่จะเป็นตัวพิมพ์เล็กคุณจะเห็นว่ามีปัญหาอยู่ที่นั่น นั่นเป็นเหตุผลที่มีโหมด termio / termios พิเศษ (และยังคงมีอยู่ใน Unices ที่ทันสมัยแม้ว่าเทอร์มินัลเหล่านั้นจะหายไปนาน) เพื่อจัดการกับเหล่านั้น
termio / termios เป็นอินเทอร์เฟซรุ่นเก่าและใหม่กว่าเพื่อควบคุมไดรเวอร์ tty บน Unix ใน termio ioctlคุณระบุอินพุตเอาต์พุตเอาต์พุตควบคุมแฟล็ก ... ที่ระบุวิธีจัดการสัญญาณไฟฟ้าบนบรรทัดอนุกรมในการจัดการกับอักขระอินพุตและเอาต์พุตและลักษณะการทำงานภายในของไดรเวอร์ wrt เช่น echo ตัวแก้ไขเส้น ... ส่วนใหญ่ใช้กับเทอร์มินัลเสมือนเช่นคอนโซล Unix VGA สมัยใหม่หรือเทอร์มินัลหลอก
อินเตอร์เฟสบรรทัดคำสั่งที่termio(s)เป็นsttyคำสั่ง
เพื่อจัดการกับเทอร์มินัลตัวพิมพ์ใหญ่มีสามtermio(s)แฟลกที่เกี่ยวข้อง:
IUCLC(ป้อนตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก): อักขระที่เข้ามาจะถูกแปลงเป็นตัวพิมพ์เล็กเมื่อป้อนข้อมูล นั่นหมายถึงการส่งโดยสถานีถือเป็นA aนั่นหมายความว่ามีเกี่ยวกับเรื่องนี้ตอนนี้ผมสามารถพิมพ์LSบน VT50 ของฉันและเปลือกจะอ่านจากls /dev/ttyXตอนนี้ฉันยังสามารถรันsttyคำสั่งได้
- ขณะนี้ด้วย
IUCLCคนเดียวและเทอร์มินัลechoในขณะที่ฉันพิมพ์LSคนขับจะส่งlsกลับไปที่เทอร์มินัล (เพื่อให้ฉันเห็นสิ่งที่ฉันพิมพ์) ซึ่งไม่สามารถแสดงได้ดังนั้นเราจึงต้องการOLCUC(Output Lower Case to Upper Case) นั่นคือ เราจำเป็นต้องแปลงอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ก่อนที่จะส่งไปยังเทอร์มินัล
- ตอนนี้เราสามารถใช้งาน Unix ได้จาก VT50 แต่ถ้าหากเราต้องการใส่ตัวอักษรตัวพิมพ์ใหญ่ตอนนี้ล่ะ? นั่นคือสิ่งที่
xcase ท้องถิ่นธงมาใน. นี้จะช่วยให้ (ในโหมดการป้อนข้อมูลที่ยอมรับเท่านั้น) ส่งกรณีบนAโดยการพิมพ์\Aและการส่งออกเป็นกรณีบนจะกลายเป็นA \A(อันนั้นไม่ได้ดำเนินการบน Linux)
sttyคำสั่งมีความสอดคล้องกันiuclc, olcucและการตั้งค่าและนามแฝงสำหรับทั้งสาม:xcase lcaseตั้งค่าเริ่มต้นและสิ่งที่คุณได้รับหลังจากที่stty saneเป็นlcaseปิด
ดังนั้นเมื่อคุณใช้ VT50 สิ่งที่คุณต้องทำก็คือรัน:
stty lcase
เพื่อให้สามารถทำอะไรได้ แต่อย่าลืมว่าคุณจะทำอย่างนั้นได้อย่างไรเมื่อคุณสามารถส่งจดหมายตัวพิมพ์ใหญ่ได้เท่านั้น? นั่นคือสิ่งที่คุณจำเป็นต้องมีSTTYคำสั่งเป็นชื่อแทนสำหรับsttyและที่ว่าทำไมsttyการสนับสนุนเป็นชื่อแทนสำหรับLCASElcase
ไม่มีSANEนามแฝงดังกล่าวเนื่องจากคุณไม่ต้องการทำstty saneเมื่อเทอร์มินัลของคุณเป็นตัวพิมพ์ใหญ่ทั้งหมด
หากคุณเรียกใช้stty lcaseหรือstty olcucโดยไม่ตั้งใจในสถานีปกติ (ลองในxtermหรือสถานีที่ทันสมัย) นั่นคือสิ่งที่คุณต้องป้อนstty saneเพื่อกลับสู่ปกติ แต่คุณไม่ต้องการSTTYคำสั่งสำหรับสิ่งนั้น หากคุณพิมพ์stty saneคุณจะเห็นSTTY SANEเสียงสะท้อนกลับ แต่นั่นเป็นเพียงข้อความที่แสดง (ไม่ใช่คำสั่งที่ป้อน) ที่จะถูกแปลมันยังคงเป็นstty saneคำสั่งที่จะถูกเรียกใช้
บรรดาiuclc, olcuc, xcaseธงที่ใช้ในการระบุโดย POSIX (และอาจเป็นเหตุผลที่จะดำเนินการบน Linux แม้ว่าฉันจริงจังสงสัยใครเคยเชื่อมต่อใด ๆ ของอาคารเก่าที่เป็นระบบลินุกซ์ (นอกเหนือจากความสนุกสนาน)) แต่ได้ถูกลบออกใน POSIX: 2001