差出人 https://www.gnu.org/software/bash/manual/html_node/Redirections.html
次の表に示すように、Bashは、リダイレクトで使用される場合に特にいくつかのファイル名を処理します。
/ dev/fd/fd fdが有効な整数の場合、ファイル記述子fdが複製されます。
/ dev/stdinファイル記述子0が複製されています。
/ dev/stdoutファイル記述子1が複製されています。
/ dev/stderrファイル記述子2が複製されています。
ここで「複製」とはどういう意味ですか?いくつか例を挙げていただけますか?
リダイレクトは、 dup システム関数ファミリーを介して実装されます。 dup
はduplicationの略で、次のようになります。
3>&2
複製します(dup2
)filedescritor2をfiledescriptor3に追加し、filedescriptor 3が既に開いている場合は閉じる可能性があります(これはfork
ed offの子で発生するため、親プロセスには影響しません(そうでない場合(リダイレクト)特定のコンテキストでのシェル関数では、シェルはそれをあたかもそうであるかのように見せます))。
あなたがするとき:
1<someFile
新しいファイル記述子でopen
someFile
(これは、open
syscallが通常行うことです)、その後dup2
そのファイル記述子を1に。
マニュアルによると、リストされている特別な開発ファイルの1つがsomeFile
の代わりになると、シェルはopen
-on-a-new-fdステップをスキップし、代わりに直接dup2
一致するファイル記述子(つまり、/ dev/stdoutの場合は1など)をターゲット(リダイレクトの左側にあるファイル記述子)に移動します。