command-line – ¿Cómo verifico si mi shell se está ejecutando en una terminal?

Pregunta:

Quiero realizar alguna acción solo si mi shell está "conectado" a un terminal, es decir, solo si mi entrada estándar proviene de la entrada de un terminal y mi salida estándar (¿y el error estándar? ¿Quizás eso no importa) se imprime / se repite en una terminal.

¿Cómo puedo hacer eso, sin depender directamente de las especificaciones de GNU / Linux (como /proc/self )?

Respuesta:

isatty es una función para verificar esto , y el indicador -t del comando de test hace accesible desde un script de shell:

-t descriptor_archivo

Verdadero si el número de descriptor de archivo file_descriptor está abierto y está asociado con una terminal. False si file_descriptor no es un número de descriptor de archivo válido, o si el número de descriptor de archivo file_descriptor no está abierto, o si está abierto pero no está asociado con una terminal.

Puede verificar si FD 0 (entrada estándar) es un TTY con:

test -t 0

Puede hacer lo mismo con los FD 1 y 2 para verificar los flujos de salida y error, o todos ellos:

test -t 0 -a -t 1 -a -t 2

El comando devuelve 0 (tiene éxito) si los descriptores están conectados a una terminal y es falso en caso contrario.

test también está disponible como el comando [ para una "prueba de corchetes":

 if [ -t 0 ] ; then ...

es una forma idiomática de escribir este condicional.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım