入力リダイレクトでファイルがあるときにUnixで貼り付けコマンドの実装を理解しようとしています。
次のファイルがあるとします。
A.txt:
A
B
C
D
B.txt:
1
2
3
4
UNIX コマンド:
paste - A.txt - < B.txt
予想出力:
1 A 2
3 B 4
C
D
これは、ファイルをstdinにリダイレクトするたびに両方が-
同じファイルを共有することを意味しますか-
?(これは何ですか?)
出力が次のタスクと異なる理由を理解しようとしています。リダイレクトされた入力は交換されたばかりですが、結果が異なるpaste B.txt A.txt B.txt
ためです。-
答え1
文書(man paste
)は次のように書き込みます。
FILEまたはFILEがない場合は、
-
標準入力を読み込みます。
-
ソースファイルとして含めると標準入力(標準入力)を読んだ。標準入力はシェルによって開かれ、ファイル記述子 0 に割り当てられ、その記述子paste
からデータが読み取られます。コマンドpaste
自体は何も開きません標準入力(そのため、これはできません-
。)したがって、このファイル記述子のすべての読み取りは共有されます。
あなたの例では、最初の行B.txt
は1
最初のフィールドに使用されます。 2番目の行は2番目のフィールドB.txt
です。2
これはまで続きます。標準入力EOF(ファイルの終わり)を返します。