¿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 tty
puede 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/tty1
o similar. Si se utiliza una consola serie, es posible que vea /dev/ttyS0
otro dispositivo de puerto serie. Las únicas ocasiones en las que puede ver un literal /dev/console
pueden 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/securetty
existe 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 systemd
servicio, 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 systemd
la 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 | sort
en los dos entornos. $DISPLAY
es uno para comprobar.
Además, lea man isatty
.