ตรวจสอบว่าทำงานใน terminal เสมือนหรือไม่


12

ฉันต้องการที่จะautologinไปtty1เมื่อเข้าสู่ระบบแล้วใช้vlockเพื่อล็อค

ฉันจะตรวจจับจาก Bash ได้อย่างไรถ้าเทอร์มินัลปัจจุบันเป็นคอนโซลเทอร์มินัลเสมือน (เช่นtty1) เพื่อที่ฉันจะสามารถวางvlockสายเข้า.bash_profileและทำงานได้ก็ต่อเมื่อลงชื่อเข้าใช้ผ่านtty1เท่านั้น


1
ฉันคิดว่าคุณควรเปลี่ยนชื่อเป็น "ตรวจสอบว่าทำงานใน terminal เสมือน" เพราะttyอาจเข้าใจผิดว่าหมายถึงตรวจพบว่าเปลือกปัจจุบันเชื่อมต่อกับอุปกรณ์หลอกหลอก
โจเซฟอาร์

@JosephR ขอบคุณสำหรับการชี้ให้เห็นได้รับการแก้ไข
kiri

@JosephR: โทรไม่ดี อุปกรณ์เทอร์มินัลหลอกคือp  ty ไม่ใช่ tty กำลังจะเปลี่ยนกลับไปใช้ชื่อเดิม
Incnis Mrsi

ที่เกี่ยวข้อง: unix.stackexchange.com/questions/16387/ …
Incnis Mrsi

คำตอบ:


14

คุณสามารถใช้ttyเพื่อรับชื่อของเทอร์มินัลเสมือนปัจจุบันจากนั้นทดสอบกับมันด้วยcaseคำสั่ง:

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

ยิ่งกว่านั้นแทนที่จะสมมติว่าเชลล์ล็อกอินของเทอร์มินัลทั้งหมดคือ ttys
kiri

1
ไม่จำเป็นต้องยกเว้น X: หากสคริปต์ทำงานในเทอร์มินัลอีมูเลเตอร์ใต้ X ttyจะแสดง pseudoterminal ของเทอร์มินัลอีมูเลเตอร์ไม่ใช่ฟิสิคัลเทอร์มินัลที่ X ทำงานอยู่
Gilles 'หยุดความชั่วร้าย'

5

โดยทั่วไปเพียงพอที่จะทดสอบ STDIN (FD0):

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

ตกลงเนื่องจาก.bash_profileถูกเรียกบนล็อกอินเชลล์และการล็อกอิน GUI ปกติไม่มีเทอร์มินัลดังนั้นเชลล์ล็อกอินเทอร์มินัลเดียวควรเป็น tty หาได้ดี
kiri

1
หากข้อมูลโค้ดนี้รวมอยู่ในสคริปต์ที่มีขนาดใหญ่กว่าซึ่งมีการเปลี่ยนเส้นทาง stdin จากไฟล์มันจะรายงานว่าไม่มี TTY แม้ว่าจะเรียกใช้จาก VT
โจเซฟอาร์

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