bash testing para “terminal aberto”

1

Eu observei na lista de Expressões CONDICIONAIS do BASH uma expressão -t que testa se um descritor de arquivo é um terminal aberto. Eu tentei o seguinte:

if [[ -t $(tty) ]]; then
  echo open terminal $(tty)
else
  echo not open terminal $(tty)
fi;

e obtenha minha resposta

not open terminal /dev/pts/35

Eu tentei o mesmo de um console e recebo

not open terminal /dev/tty1

na página manual -t descreve seu argumento como FD a "descritor de arquivo" em vez de outras expressões condicionais que descrevem o argumento como FILE

alguém pode fornecer um teste BASH para um 'descritor de arquivo' que seja "aberto" e "refere-se ao terminal"?

    
por ben_wing 21.11.2013 / 17:28

1 resposta

1

Os descritores de arquivos são inteiros pequenos.

Em particular, stdin é fd 0; stdout é fd 1; e stderr é fd 2.

Você terá visto o mesmo uso de "descritor de arquivo" em linhas como:

./cmd 2>&1

O que significa "executar ./cmd , redirecionando fd 2 (stderr) para fd 1 (stdout).

O uso normal de -t é dizer se a entrada está vindo de um terminal:

[[ -t 0 ]] && echo "Input is coming from a terminal"
    
por 21.11.2013 / 20:18