สคริปต์ของฉันจะรู้ได้อย่างไรเมื่อฉันอยู่ในคอนโซลเสมือนกับ xterm


11

สคริปต์บางส่วนของฉัน (การเปลี่ยนคีย์แมปการเพิ่มคีย์สาธารณะ) จำเป็นต้องดำเนินการแตกต่างกันเมื่ออยู่ในคอนโซลเสมือนและใน xterm รหัสที่แท้จริงคืออะไร

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi

คำตอบ:


6

ฟังดูเหมือนว่าคุณต้องการตรวจสอบว่ามีเซิร์ฟเวอร์ X ที่จะเชื่อมต่อหรือไม่

สิ่งที่ต้องการ:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi

1
ฉันไม่เคยอยู่ในตำแหน่งที่มีสามคำตอบที่สมบูรณ์แบบใน stackexchange
John Baber-Lucero

9

หากคุณต้องการแยกแยะการโต้ตอบจากเชลล์ที่ไม่มีการโต้ตอบให้ใช้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

ฉันไม่เคยอยู่ในตำแหน่งที่มีสามคำตอบที่สมบูรณ์แบบใน stackexchange
John Baber-Lucero

7

สิ่งนี้จะขึ้นอยู่กับระบบปฏิบัติการ สำหรับ 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 ในแอปพลิเคชันต่างๆที่คุณใช้และตั้งค่าตามความเหมาะสม


ฉันไม่เคยอยู่ในตำแหน่งที่มีสามคำตอบที่สมบูรณ์แบบใน stackexchange
John Baber-Lucero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.