Comment mon script peut-il savoir quand je suis dans une console virtuelle par rapport à un xterm?

11

Quelques-uns de mes scripts (changement de mappage de touches, ajout de clés publiques) doivent agir différemment dans une console virtuelle et dans un xterm. À quoi sert le vrai code

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

Réponses:

6

Il me semble que vous souhaitez vérifier s'il existe ou non un serveur X auquel se connecter.

Quelque chose comme:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
la source
1
Je n'ai jamais été en mesure d'avoir trois réponses parfaites sur stackexchange.
John Baber-Lucero
9

Si vous vouliez distinguer les shells interactifs des shells non interactifs, utilisez testle support intégré de pour le détecter (vous ne savez pas si ksh l'a, mais le binaire de coreutils le prend également en charge):

test -t 0 # will return 0 for interactive shells

Si vous vouliez vraiment savoir si vous êtes sur un tty / pty / pts ou autre chose, analysez la sortie de tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
la source
Je n'ai jamais été en mesure d'avoir trois réponses parfaites sur stackexchange.
John Baber-Lucero
7

Cela dépendra du système d'exploitation. Pour Linux, vous pouvez faire ceci:

#!/bin/ksh

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

Bien entendu, cela suppose que vous n'avez pas modifié la TERMvariable d'environnement vous-même, qui est automatiquement définie sur linuxuniquement lorsque vous vous connectez à une console virtuelle (sous Ubuntu, elle est définie sur xtermdans les applications de console, mais cela peut varier selon les systèmes d'exploitation). Vérifiez le contenu de TERM dans les différentes applications que vous utilisez et définissez-les comme il convient.

teppic
la source
Je n'ai jamais été en mesure d'avoir trois réponses parfaites sur stackexchange.
John Baber-Lucero