標準入力(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