Détecter si en cours d'exécution dans un terminal virtuel?

12

Je voudrais me connecter automatiquement à la tty1connexion, puis l'utiliser vlockpour le verrouiller.

Comment puis-je détecter à partir de Bash si le terminal actuel est un terminal virtuel de console (par exemple tty1), afin que je puisse mettre la vlockligne .bash_profilededans et la faire fonctionner uniquement si je me connecte tty1?

kiri
la source
1
Je pense que vous devriez changer le titre en "Détecter si vous utilisez un terminal virtuel" car cela ttypeut être mal compris pour signifier détecter si le shell actuel est connecté à un périphérique pseudo-terminal.
Joseph R.
@JosephR. Merci de l'avoir signalé, corrigé
kiri
@JosephR: mauvais appel. Un périphérique pseudo-terminal est p  ty, pas tty. Sur le point de revenir au titre d'origine.
Incnis Mrsi

Réponses:

14

Vous pouvez utiliser ttypour obtenir le nom du terminal virtuel actuel, puis le tester avec une caseinstruction:

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac
Gilles 'SO- arrête d'être méchant'
la source
Encore mieux, au lieu de supposer que tous les shells de connexion de terminal sont des ttys.
kiri
1
Pas besoin d'exclure X: si le script s'exécute dans un émulateur de terminal sous X, ttyaffichera le pseudoterminal de l'émulateur de terminal, pas le terminal physique sur lequel X s'exécute.
Gilles 'SO- arrête d'être méchant'
5

Il suffit généralement de tester simplement STDIN (FD0):

[ -t 0 ] && echo "TTY available" || echo "No TTY available"
JRFerguson
la source
OK, car .bash_profileest appelé sur les shells de connexion et la connexion GUI normale n'a pas de terminal, donc le seul shell de connexion de terminal doit être un tty. Bonne trouvaille
kiri
1
Si cet extrait était inclus dans un script plus grand dont le stdin était redirigé à partir d'un fichier, il signalerait qu'aucun TTY n'est disponible même s'il est exécuté à partir d'un VT.
Joseph R.
1
@JosephR Correct. La valeur est souvent avec cronou des attravaux pour éviter les échecs lorsque les scripts supposent une entrée interactive.
JRFerguson