พฤติกรรมการเยื้องที่ไม่คาดคิดเมื่อฉันตั้งค่าเทอร์มินัลเป็นโหมดดิบ - เหตุใดจึงเป็นเช่นนี้


27

ขึ้นอยู่กับสิ่งที่ฉันได้อ่านเมื่อเทอร์มินัลอยู่ในโหมด raw ตัวละครจะไม่ได้รับการประมวลผลโดยไดรเวอร์เทอร์มินัล แต่จะถูกส่งตรง

ฉันตั้งค่าเทอร์มินัลในโหมด raw โดยใช้คำสั่งstty rawและสังเกตว่าเอาต์พุตถูกเยื้องไปทางขวาในแต่ละครั้งจนกว่าจะไม่มีที่ว่างอีกต่อไป นี่คือสิ่งที่ฉันหมายถึง:

ป้อนคำอธิบายรูปภาพที่นี่

เหตุใดพฤติกรรมนี้จึงเกิดขึ้น!

คำตอบ:


45

การsttyตั้งค่าอย่างใดอย่างหนึ่ง( onlcr) บอกให้ไดรเวอร์ของเทอร์มินัลเปลี่ยนบรรทัดใหม่ (ซึ่งจริง ๆ แล้วคือ ASCII line-feed) เป็น carline-return plus line-feed

ระบบที่เหมือนยูนิกซ์เพียงแค่เขียนบรรทัดใหม่ขึ้นบรรทัดสุดท้ายปล่อยให้ไดรเวอร์เทอร์มินัลทำสิ่งที่ถูกต้อง (แปลงขึ้นบรรทัดใหม่เป็น carline-return plus line-feed)

Carriage-return "go left" และ line-feed "ลงไป"

เมื่อคุณตั้งค่าเทอร์มินัลเป็นโหมด raw ขึ้นบรรทัดใหม่จะไม่ถูกแปลงเป็นผลตอบแทนการขนส่งรวมทั้งการป้อนบรรทัด หากไม่มี carriage-return คุณจะได้เอฟเฟกต์ของบันไดนั้น


และสำหรับมุมมองเชิงลึกคุณสามารถดู @ stéphane-chazelas โพสต์ที่ดีจริงๆ: unix.stackexchange.com/questions/151916/ซึ่งแสดงสิ่งต่าง ๆ มากมายเกี่ยวกับการแปลงเทอร์มินัล (และผลข้างเคียง) . สั้น: เพียง "ssh -t" เพื่อใช้คำสั่งแบบโต้ตอบ แต่ในสคริปต์ของคุณใช้เพียง ssh ถ้าคุณต้องการได้สิ่งที่แน่นอนคำสั่งสร้าง (เช่น: ไฟล์ tar ที่สร้างขึ้นในด้านหนึ่งของ ssh และอ่าน / เขียนบน อีกด้านหนึ่ง: อย่าเพิ่ม "-t" หรืออาจ (... จะ?) ทำให้คู่ของคุณยุ่งเหยิง)
Olivier Dulac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.