วิธีรับชื่อจริงของเทอร์มินัลการควบคุม?
เราจะได้รับชื่อจริงของเทอร์มินัลการควบคุมได้อย่างไร (ถ้ามีอีกหนึ่งข้อผิดพลาด) เป็นชื่อพา ธ โดย "ชื่อจริง" ฉันหมายถึงไม่/dev/ttyซึ่งไม่สามารถใช้โดยกระบวนการอื่น ๆ เพื่ออ้างถึงเทอร์มินัลเดียวกัน ฉันชอบคำตอบเป็นรหัสเปลือกง่าย (เช่นตัวอย่างด้านล่าง) ถ้าเป็นไปได้มิฉะนั้นเป็นฟังก์ชั่น C โปรดทราบว่าสิ่งนี้จะต้องใช้งานได้แม้ว่าจะมีการเปลี่ยนเส้นทางอินพุตมาตรฐานเพื่อให้ttyไม่สามารถใช้ยูทิลิตี้: หนึ่งจะได้รับnot a ttyข้อผิดพลาดในกรณีเช่นนี้เนื่องจากttyเพียงพิมพ์ชื่อไฟล์ของเทอร์มินัลที่เชื่อมต่อกับอินพุตมาตรฐาน ภายใต้ Linux สามารถใช้: echo "/dev/`ps -p $$ -o tty | tail -n 1`" แต่นี้ไม่ได้พกพาเป็นไปตาม POSIX, รูปแบบของชื่อสถานีเป็นที่ไม่ได้ระบุ เกี่ยวกับฟังก์ชั่น C, ctermid (NULL)ส่งคืน/dev/ttyซึ่งไม่มีประโยชน์ที่นี่ หมายเหตุ:ตามzshเอกสารประกอบอย่างใดอย่างหนึ่งที่สามารถทำได้ zsh -c 'echo $TTY' แต่ตอนนี้ (เวอร์ชั่น 5.0.7) ล้มเหลวเมื่อทั้งอินพุตมาตรฐานและเอาต์พุตมาตรฐานถูกเปลี่ยนเส้นทาง: $ zsh -c 'echo …