À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 "not a tty" tem um nome coletivo ou todos são apenas referidos individualmente?
Pode ser um arquivo (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 stdin, mas isso não afeta as leituras do tty. Freqüentemente, os programas leem as senhas do arquivo tty. Isso pode ser bom porque não interfere nos dados que você deseja que o comando leia do stdin, mas pode ser ruim se você deseja fazer o script do comando (e precisa, por exemplo ,
expect
ousocat
para manipular o terminal).Mas um processo ainda possui um tty de controle, mesmo que não esteja conectado ao stdin.
Esses são os redirecionamentos :
Portanto, em vez de "não é um tty", você poderia dizer "é um redirecionamento". Redirecione um arquivo para um comando:
Here Documents - Este tipo de redirecionamento instrui o shell a ler a entrada da fonte atual até que uma linha contendo apenas uma palavra (sem espaços em branco à direita) seja vista:
Redirecione stdout de commandA para commandB: