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?


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

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"

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.