2017-01-31 3 views

答えて

2

あなたがthe tty manual pageを読めば、あなたはそれが言う表示されます。

標準入力に接続された端末のファイル名を印刷します。

重点鉱山

あなたがファイルであることを、標準入力をリダイレクトしているので、その後ttyコマンドは、それがttyに接続されていないことを報告します。

1

ttyは、標準入力がファイルからリダイレクトされたループ内にあるため、標準入力が指示されていることがわかります。

「標準」と見なされるファイル記述子(ファイル記述子0)ではなく、別のファイル記述子を使用して、実行しようとしていることを達成できます。

while IFS= read -r -u 5 line 
do 
    tty 
done 5< file 

-u 5オプションは、ときに非常に便利です。この技術ファイルディスクリプタで5

のファイルの内容を取得し、それを利用できるようにバッシュを伝えるファイルディスクリプタ5から5<リダイレクトを読むためにreadを伝えますユーザー入力が必要な場合など、ループ内の標準入力をキャプチャしないようにする必要があります。

また、任意のコマンドの出力をリダイレクトすることができ、プロセス置換で動作:<()は、FIFO特殊ファイルを作成する式で規定されたコマンドを実行し、フィード、この場合

while IFS= read -r -u 5 line 
do 
    tty 
done 5< <(any_command with arguments) 

そのコマンドをFIFOへの入力として出力する。式はファイル名(FIFOへの実際のパス)を生成し、このファイルは他のファイルと同様にリダイレクションのために読み込まれます。

これは通常ループの内部がスクリプトの残りの部分と同じコンテキストで実行されるため、サブシェルを避けてパイプを使用するよりも優れています。したがって、ループ内で行われる変数の割り当ては、ループが終了します。

関連する問題