標準入力:ttyではありません

標準入力:ttyではありません

標準入力(stdin)が端末の場合もあります。

$ tty
/dev/pts/0

時にはそうではありません:

$ echo hello | tty
not a tty

$ tty < /dev/null
not a tty

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

端末でない場合、「stdin」とは何ですか? 「ttyではない」グループは集合的な名前を持っていますか、それとも別々に参照されますか?

答え1

ファイル(またはデバイスファイルまたはFIFO)またはパイプです。

通常のオープンファイルよりも制御端末での操作方法が多いため、区別が重要です。これがメリットになることもあり、デメリットになることもあります。

たとえば、端末をリダイレクトできません。 stdinをリダイレクトできますが、これはttyからの読み込みには影響しません。プログラムはしばしばttyからパスワードを読みます。これは、コマンドが標準入力から読み取ろうとするデータを妨げないために良いかもしれませんが、コマンドをスクリプト化したい場合(たとえば、端末を処理する必要があるexpect場合)、それはうまくsocatいかないかもしれません。

しかし、プロセスが標準入力に接続されていなくても、まだ制御ttyがあります。

答え2

人々はリダイレクト:

したがって、「ttyではありません」の代わりに「リダイレクトです」と言うことができます。ファイルを次のコマンドにリダイレクトします。

command < filename    

Here Documents - このタイプのリダイレクトは、単語のみを含む行(末尾の空白なし)が表示されるまで、現在のソースから入力を読み取るようにシェルに指示します。

<<[-]word
        here-document
delimiter

commandAのstdoutをcommandBにリダイレクトします。

commandA | commandB

関連情報