entrada padrão: não é um tty

1

Às vezes, a entrada padrão (stdin) é um terminal:

$ tty
/dev/pts/0

Às vezes não:

$ echo hello | tty
not a tty

$ tty < /dev/null
not a tty

$ tty << eof
> hello
> eof
not a tty

Quando "stdin" não é um terminal, o que é? Esse grupo "não é tty" tem um nome coletivo, ou são todos apenas referidos individualmente?

    
por Steven Penny 01.04.2018 / 22:59

2 respostas

2

Pode ser um arquivo (até mesmo um arquivo de dispositivo ou FIFO) ou um pipeline.

A diferença é importante porque você pode operar em um terminal de controle de mais maneiras do que em um arquivo aberto normal. Às vezes isso é vantajoso, às vezes é desvantajoso.

Por exemplo, você não pode redirecionar o terminal. Você pode redirecionar o stdin, mas isso não afeta as leituras do tty. Freqüentemente programas leem senhas do tty. Isso pode ser bom porque não interfere nos dados que você quer que o comando leia de stdin, mas pode ser ruim se você quiser fazer o script do script (e precisar, por exemplo, expect ou socat para manipular o terminal).

Mas um processo ainda tem um controle tty mesmo se não estiver conectado a stdin.

    
por 02.04.2018 / 00:11