¿Cómo determinar que el script bash se ejecuta en la 'consola' y no en una sesión de terminal remota?

¿Cómo determinar que el script bash se ejecuta en la 'consola' y no en una sesión de terminal remota?

¿Cómo determinar que el script bash se ejecuta en la 'consola' y no en una sesión de terminal remota? Creo que hay alguna manera de determinar que el script se está ejecutando en/dev/console. ¿O estoy ladrando al árbol (binario) equivocado?

Respuesta1

Esto suena como una posibleproblema XY.

Un antiguo comando de Unix ttypuede indicarle en qué dispositivo está su terminal. Entonces algo como esto podría hacer lo que estás pidiendo:

if [ $(tty) = "/dev/console" ]; then
    echo "Yes, I am on the console."
else
    echo "No, I am not on the console."
fi

Sin embargo,un programa que se ejecuta en una sesión de inicio de sesión en una consola virtual de Linux podría ver /dev/tty1o similar. Si se utiliza una consola serie, es posible que vea /dev/ttyS0otro dispositivo de puerto serie. Las únicas ocasiones en las que puede ver un literal /dev/consolepueden ser cuando se ejecuta en modo shell de emergencia/usuario único. Saber qué dispositivos podrían ser consolas válidas no es trivial; esa es parte de la razón por la cual /etc/securettyexiste y es configurable por el administrador del sistema.

(Si elige rechazar los puertos serie, un administrador del sistema en algún lugar intenta utilizar una conexión serie a través de LAN para solucionar un problema).muyEl sistema remoto podría odiarte.)

Si un proceso o script se ejecuta como un systemdservicio, es posible que no tenga ningún TTY en el sentido tradicional; en su lugar, su salida estándar y su error estándar se conectarán a systemdla función de registro en diario, que puede pasarlos o no a la consola en el momento del arranque dependiendo de cómo esté configurado el servicio.

Por favor, edite su pregunta para especificarpor quéQuiere saber si está en la 'consola' o no, para que podamos intentar encontrar una manera de obtener la respuesta a su pregunta en un sentido que sea apropiado para sus necesidades reales.

Respuesta2

Si ejecuta ps axu, busque en la columna TTY la "consola" raíz que utiliza el proceso.

Cada proceso tiene un padre trabajando hasta el proceso de inicio raíz.

Respuesta3

Explora, con diff, los resultados de env | sorten los dos entornos. $DISPLAYes uno para comprobar.

Además, lea man isatty.

información relacionada