¿Detectar si se ejecuta en una terminal virtual?


12

Me gustaría iniciar sesión automáticamente al tty1iniciar sesión y luego usarlo vlockpara bloquearlo.

¿Cómo puedo detectar desde Bash si el terminal actual es un terminal virtual de consola (p tty1. Ej. ), Para poder poner la vlocklínea .bash_profiley hacer que se ejecute solo si me conecto tty1?


1
Creo que debería cambiar el título a "Detectar si se ejecuta en un terminal virtual" porque ttypuede malinterpretarse para significar detectar si el shell actual está conectado a un dispositivo pseudo-terminal.
— Joseph R.

@JosephR. Gracias por señalarlo, arreglado
— kiri

@JosephR: mala llamada. Un dispositivo pseudo-terminal es p  ty, no tty. A punto de volver al título original.
— Incnis Mrsi

Respuestas:


14

Puede usar ttypara obtener el nombre del terminal virtual actual y luego probarlo con una casedeclaración:

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

Aún mejor, en lugar de asumir que todos los shells de inicio de sesión de terminal son ttys.
— kiri

1
No es necesario excluir X: si el script se ejecuta en un emulador de terminal bajo X, ttymostrará el pseudoterminal del emulador de terminal, no el terminal físico en el que X se está ejecutando.
— Gilles 'SO- deja de ser malvado'

5

Generalmente es suficiente simplemente probar STDIN (FD0):

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

OK, porque .bash_profilese llama en los shells de inicio de sesión y el inicio de sesión normal de la GUI no tiene un terminal, por lo que el único shell de inicio de sesión del terminal debe ser un tty. Buen hallazgo
— kiri

1
Si este fragmento se incluyera en un script más grande que tuviera su stdin redirigido desde un archivo, informaría que no hay TTY disponible incluso si se ejecuta desde un VT.
— Joseph R.

1
@JosephR Correcto. El valor es a menudo con crono attrabajos para evitar fallas cuando los scripts asumen entradas interactivas.
— JRFerguson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.