สคริปต์บางส่วนของฉัน (การเปลี่ยนคีย์แมปการเพิ่มคีย์สาธารณะ) จำเป็นต้องดำเนินการแตกต่างกันเมื่ออยู่ในคอนโซลเสมือนและใน xterm รหัสที่แท้จริงคืออะไร
#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
สคริปต์บางส่วนของฉัน (การเปลี่ยนคีย์แมปการเพิ่มคีย์สาธารณะ) จำเป็นต้องดำเนินการแตกต่างกันเมื่ออยู่ในคอนโซลเสมือนและใน xterm รหัสที่แท้จริงคืออะไร
#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
คำตอบ:
ฟังดูเหมือนว่าคุณต้องการตรวจสอบว่ามีเซิร์ฟเวอร์ X ที่จะเชื่อมต่อหรือไม่
สิ่งที่ต้องการ:
if [ -n "$DISPLAY" ]; then
: X
else
: no X
fi
หากคุณต้องการแยกแยะการโต้ตอบจากเชลล์ที่ไม่มีการโต้ตอบให้ใช้test
การสนับสนุน inbuilt ในการตรวจจับ (ไม่แน่ใจว่า ksh มีหรือไม่ แต่ไบนารีจาก coreutils รองรับด้วย):
test -t 0 # will return 0 for interactive shells
หากคุณตั้งใจจริงๆว่าคุณอยู่ใน tty / pty / pts หรืออย่างอื่นให้แยกวิเคราะห์ผลลัพธ์จากtty
:
$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
สิ่งนี้จะขึ้นอยู่กับระบบปฏิบัติการ สำหรับ Linux คุณสามารถทำสิ่งนี้:
#!/bin/ksh
if [ "$TERM" == "linux" ]; then
echo "I'm in a virtual console"
else
echo "I'm not in a virtual console"
fi
แน่นอนว่าสมมติว่าคุณไม่ได้เปลี่ยนTERM
ตัวแปรสภาพแวดล้อมด้วยตัวคุณเองซึ่งถูกตั้งค่าเป็นอัตโนมัติlinux
เมื่อคุณล็อกอินเข้าสู่คอนโซลเสมือน (ภายใต้ Ubuntu ตั้งค่าเป็นxterm
ในแอปพลิเคชันคอนโซล แต่อาจแตกต่างกันไประหว่างระบบปฏิบัติการ) ตรวจสอบเนื้อหาของ TERM ในแอปพลิเคชันต่างๆที่คุณใช้และตั้งค่าตามความเหมาะสม