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 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
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.