Skąd mój skrypt może wiedzieć, kiedy jestem w wirtualnej konsoli kontra xterm?

11

Kilka moich skryptów (zmiana mapy klawiszy, dodawanie klucza publicznego) musi działać inaczej w konsoli wirtualnej niż w xtermie. Jaki jest prawdziwy kod

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
John Baber-Lucero
źródło

Odpowiedzi:

6

Wydaje mi się, że chcesz sprawdzić, czy istnieje serwer X, z którym można się połączyć.

Coś jak:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
źródło
1
Nigdy nie byłem w stanie uzyskać trzech idealnych odpowiedzi na temat wymiany stosów.
John Baber-Lucero
9

Jeśli chciałeś odróżnić powłoki interaktywne od nieinteraktywnych, użyj testwbudowanej obsługi do ich wykrywania (nie jestem pewien, czy ma go ksh, ale obsługuje go także plik binarny z coreutils):

test -t 0 # will return 0 for interactive shells

Jeśli naprawdę miałeś na myśli to, czy używasz tty / pty / pts, czy czegoś innego, przeanalizuj dane wyjściowe z tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
źródło
Nigdy nie byłem w stanie uzyskać trzech idealnych odpowiedzi na temat wymiany stosów.
John Baber-Lucero,
7

Będzie to zależeć od systemu operacyjnego. W przypadku systemu Linux możesz to zrobić:

#!/bin/ksh

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

Zakłada to oczywiście, że nie zmieniłeś TERMzmiennej środowiskowej, która jest automatycznie ustawiana linuxtylko po zalogowaniu się do konsoli wirtualnej (w Ubuntu jest to ustawione xtermw aplikacjach konsolowych, ale może się różnić w zależności od systemu operacyjnego). Sprawdź zawartość TERM w różnych używanych aplikacjach i ustaw odpowiednio.

teppic
źródło
Nigdy nie byłem w stanie uzyskać trzech idealnych odpowiedzi na temat wymiany stosów.
John Baber-Lucero,