Dalam tutorial bash yang saya baca, dikatakan bahwa jika Anda membuka deskriptor file untuk dibaca, yaitu
exec 3< echolist
Maka Anda harus menutupnya seperti ini,
exec 3<&-
Namun, jika Anda membuka deskriptor file untuk menulis, itu harus ditutup seperti ini:
exec 3>&-
Namun ketika saya melihat di internet, saya melihat orang membuka file dan kemudian menutupnya dengan ini:
exec 3>&-
CATATAN: ketika, menurut tutorial, mereka harus menggunakan exec 3<&1
.
Jadi pertanyaan saya adalah, dapatkah semua deskriptor file ditutup melalui di exec n>&-
mana n adalah nomor deskriptor file? Terlepas apakah itu dibuka untuk membaca, menulis, atau keduanya?
bash
shell
io-redirection
Jason
sumber
sumber
>&-
dan<&-
adalah fd default ketika tidak ditentukan (>&-
adalah1>&-
sementara<&-
adalah0<&-
). Sama denganx>&y
yangx<&y
kecuali saatx
tidak disediakan.Jawaban:
Anda dapat menutup deskriptor file menggunakan keduanya
<&-
dan>&-
,bash
akan mem-parsing dua sintaks sebagai sama.Dari file y.tab.c dalam
bash
kode sumber:sumber
<>
deskriptor file.3>&-
atau3<&-
tampaknya menutup deskripsi.<>
bisa dilakukan dengan cara yang sama.Sejauh yang saya bisa lihat,
exec 3>&-
danexec 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 :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:
versus ini:
menunjukkan bahwa dalam kedua kasus, Bash melakukan hal yang persis sama.
Dua Fakta yang Cukup Menarik
[n]>&-
menutup deskriptor file.Dalam kode Bash untuk menangani pengalihan (redir.c) Anda dapat menemukan ini:
sumber
[N]>&WORD
: git .savannah.gnu.org / cgit / bash.git / tree / doc /…Contoh untuk pemahaman cuonglm tentang penutupan '<>' FD.
Ini dikutip dari Advanced Bash-Scripting Guide di http://tldp.org/LDP/abs/html/io-redirection.html
sumber