ファイル記述子を自分で開いてstdinにリダイレクトするときに、なぜ1回しか使用できないのですか?
以下の例を見て、私が言いたいことを理解してください。 catコマンドで1回読み取った後、同じファイル記述子を介してファイルが2回目に読み取られることはありません。
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
承認された回答:
ファイルを印刷するには、最初のcat
最後まで読まなければなりません。 exec 6< input.txt
シェルが停止するか閉じるまで、シェルはファイル記述子を保持します。そのため、2番目のcat
の場合、ファイルオフセットは
ファイルの終わりを指します。 が呼び出されるため、stdoutには何も書き込まれません。
Linuxベースのシステムの場合は、ファイル記述子情報を確認することで、それが発生していることがわかります。
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6
そのスクリプトを実行すると、次のようなものが得られます
pos: 0
flags: 0100000
mnt_id: 113
File contents
pos: 14
flags: 0100000
mnt_id: 113
オフセットを確認する(pos
)2番目のcat
の場合、0
ではありません 実行されますが、代わりにその終わりを指します。
オフセットをリセットするには、別のexec 6< input.txt
を追加します。 cat
の間 s。