Itu harfiah, {fd}
bukan pengganti. Saya memiliki skrip yang melakukan ini, dan tidak sumber dalam apa pun, juga tidak referensi {fd} di tempat lain. Apakah ini bash yang valid?
exec {fd}</dev/watchdog
Itu harfiah, {fd}
bukan pengganti. Saya memiliki skrip yang melakukan ini, dan tidak sumber dalam apa pun, juga tidak referensi {fd} di tempat lain. Apakah ini bash yang valid?
exec {fd}</dev/watchdog
Jawaban:
Daripada harus memilih deskriptor file dan berharap itu tersedia:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
notasi ini meminta shell untuk memilih deskriptor file yang saat ini tidak digunakan, buka file untuk membaca deskriptor itu, dan menetapkan nomor ke variabel yang diberikan ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Itu tidak benar-benar melompat pada Anda, karena mereka tidak memberikan contoh eksplisit.
/dev/watchdog
juga tidak ada di Mac OS X; ini adalah perangkat khusus Linux.
Formulir:
{var}<filename
membuat file shell terbuka filename
untuk membaca dan menyimpan nomor deskriptor file dalam variabel var
. Tidak ada ruang yang diizinkan antara {var}
dan operator pengalihan, dan nomor deskriptor file akan lebih besar atau sama 10
.
Fitur ini asli dari ksh
(dari versi ksh93r pada tahun 2006), bash
disalin jauh kemudian bash-4.1-alpha
dari tahun 2010. zsh
Juga membuat perubahan lebih awal bash
dari zsh 4.3.4
pada tahun 2007.
Ini dijelaskan di bagian manual Bash tentang Pengalihan .
Setiap pengalihan yang dapat didahului dengan nomor deskriptor file sebaliknya dapat didahului oleh kata dari bentuk { varname }. Dalam hal ini, untuk setiap operator redirection kecuali
>&-
dan<&-
, shell akan mengalokasikan deskriptor file lebih besar dari 10 dan menetapkannya ke { varname }. Jika>&-
atau<&-
didahului oleh { varname }, nilai varname mendefinisikan deskriptor file untuk ditutup.