Bagaimana skrip saya tahu ketika saya berada di konsol virtual vs. xterm?

11

Beberapa skrip saya (perubahan keymap, penambahan kunci publik) perlu bertindak berbeda ketika di konsol virtual vs. dalam xterm. Untuk apa kode sebenarnya

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
John Baber-Lucero
sumber

Jawaban:

6

Kedengarannya bagi saya seperti Anda ingin memeriksa apakah ada server X yang terhubung.

Sesuatu seperti:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
sumber
1
Saya belum pernah berada di posisi memiliki tiga jawaban sempurna di stackexchange.
John Baber-Lucero
9

Jika Anda bermaksud membedakan shell interaktif dan noninteraktif, gunakan testdukungan inbuilt untuk mendeteksinya (tidak yakin apakah ksh memilikinya, tetapi biner dari coreutils juga mendukungnya):

test -t 0 # will return 0 for interactive shells

Jika Anda benar-benar bermaksud apakah Anda menggunakan tty / pty / pts atau sesuatu yang lain, parsing output dari tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
sumber
Saya belum pernah berada di posisi memiliki tiga jawaban sempurna di stackexchange.
John Baber-Lucero
7

Ini akan tergantung pada sistem operasi. Untuk Linux, Anda bisa melakukan ini:

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
  echo "I'm in a virtual console"
else
  echo "I'm not in a virtual console"
fi

Ini, tentu saja, mengasumsikan bahwa Anda belum mengubah TERMvariabel lingkungan sendiri, yang secara otomatis ditetapkan linuxhanya ketika Anda masuk ke konsol virtual (di bawah Ubuntu diatur ke xtermdalam aplikasi konsol, tetapi ini dapat bervariasi di antara OS). Periksa isi TERM di berbagai aplikasi yang Anda gunakan, dan atur sesuai kebutuhan.

hangat
sumber
Saya belum pernah berada di posisi memiliki tiga jawaban sempurna di stackexchange.
John Baber-Lucero