入力リダイレクトを使用したunix Pasteコマンドの理解

入力リダイレクトを使用したunix Pasteコマンドの理解

入力リダイレクトでファイルがあるときに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.txt1最初のフィールドに使用されます。 2番目の行は2番目のフィールドB.txtです。2これはまで続きます。標準入力EOF(ファイルの終わり)を返します。

関連情報