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
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
Odpowiedzi:
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
Jeśli chciałeś odróżnić powłoki interaktywne od nieinteraktywnych, użyj test
wbudowanej 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
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ś TERM
zmiennej środowiskowej, która jest automatycznie ustawiana linux
tylko po zalogowaniu się do konsoli wirtualnej (w Ubuntu jest to ustawione xterm
w 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.