Mengapa hanya bisa digunakan 1 kali ketika kita membuka deskriptor file sendiri dan mengarahkannya ke stdin?
Silakan lihat contoh di bawah ini untuk memahami apa yang ingin saya katakan. Setelah membacanya sekali dengan perintah cat, file tidak dibaca melalui deskriptor file yang sama untuk kedua kalinya.
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
Jawaban yang Diterima:
Untuk mencetak file, cat
pertama harus membacanya sampai akhir. exec 6< input.txt
menyebabkan shell menahan deskriptor file hingga
shell mati atau menutupnya, sehingga offset file masih menunjuk ke akhir file
ketika cat
kedua dipanggil, yang dengan demikian tidak menulis apa pun ke stdout.
Jika pada sistem berbasis Linux, Anda dapat melihat hal itu terjadi dengan mengintip info deskriptor file:
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6
Jika Anda menjalankan skrip itu, Anda akan mendapatkan sesuatu seperti
pos: 0
flags: 0100000
mnt_id: 113
File contents
pos: 14
flags: 0100000
mnt_id: 113
mengkonfirmasikan bahwa offset (pos
) bukan 0
saat cat
second kedua dieksekusi, tetapi menunjuk ke ujungnya.
Untuk mengatur ulang offset, Anda dapat menambahkan exec 6< input.txt
lainnya di antara cat
s.