diberikan cuplikan ini:
exec 3>f
echo foo >&3
echo bar >&3
cat f # returns foo bar
Mengapa bash menambahkan ke f? Apakah saya melewatkan sesuatu?
diberikan cuplikan ini:
exec 3>f
echo foo >&3
echo bar >&3
cat f # returns foo bar
Mengapa bash menambahkan ke f? Apakah saya melewatkan sesuatu?
Jawaban:
Hal yang hilang adalah Anda hanya membuka (dan memotong) file f
satu kali, dalam exec
panggilan. Kedua echo
perintah hanya menulis ke deskriptor file yang sudah dibuka. Karena itu file f
tidak akan terpotong oleh salah satu echo
panggilan.
Untuk mengarahkan output standar ke deskriptor file, sintaksisnya adalah >&n
tempat n
bilangan bulat positif kecil yang menunjukkan deskriptor file (tidak ada >>&n
redirection). Deskriptor file harus sudah dikaitkan dengan file yang dibuka agar ini berfungsi. Ini adalah tindakan membuka file dan mengaitkannya dengan deskriptor dengan exec 3>f
yang memotong file ( exec 3>>f
tidak akan memotong file dan akan membukanya dalam mode-append). Hanya menulis dengan >&3
tidak membuka file atau memotongnya.
Itu akan berbeda jika Anda melakukannya
echo foo >f
echo bar >f
cat f
(masing echo
- masing membuka dan memotong f
), atau, lebih berbelit-belit,
exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f
(file dibuka dan dipotong exec
sebelum masing-masing echo
).