Sejauh yang saya bisa lihat, exec 3>&-
dan exec 3<&-
sama dan dapat digunakan pada deskriptor file apa pun, terlepas dari bagaimana dibuka. Menurut bagian 2.7.6 dan 2.7.5 definisi POSIX dari Bahasa Perintah Shell :
2.7.5 Menggandakan Penjelasan File Input
Operator pengalihan:
[n] <& kata
[...MENGGUNTING...]
Jika kata dievaluasi menjadi '-', deskriptor file n, atau input standar jika n tidak ditentukan, harus ditutup. Upaya untuk menutup deskriptor file yang tidak terbuka tidak akan menyebabkan kesalahan. Jika kata mengevaluasi sesuatu yang lain, perilaku tersebut tidak ditentukan.
2.7.6 Menggandakan Penjelasan File Keluaran
Operator pengalihan:
[n]> & kata
[...MENGGUNTING...]
Jika kata dievaluasi menjadi '-', deskriptor file n, atau output standar jika n tidak ditentukan, ditutup. Upaya untuk menutup deskriptor file yang tidak terbuka tidak akan menyebabkan kesalahan. Jika kata mengevaluasi sesuatu yang lain, perilaku tersebut tidak ditentukan.
Perhatikan bahwa tidak ada yang menentukan apa pun tentang bagaimana deskriptor file n dibuka pada awalnya. Ini sejalan dengan fakta bahwa close (2) tidak peduli bagaimana Anda membuka file.
Langkah cepat berikut ini:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4<&-
versus ini:
exec 3< /etc/passwd
exec 4> foo
exec 3<&-
exec 4>&-
menunjukkan bahwa dalam kedua kasus, Bash melakukan hal yang persis sama.
Dua Fakta yang Cukup Menarik
>&-
dan<&-
adalah fd default ketika tidak ditentukan (>&-
adalah1>&-
sementara<&-
adalah0<&-
). Sama denganx>&y
yangx<&y
kecuali saatx
tidak disediakan.