Mengapa pengalihan bash ke file terjadi dalam mode tambahkan

8

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?

pengguna374819
sumber

Jawaban:

19

Hal yang hilang adalah Anda hanya membuka (dan memotong) file fsatu kali, dalam execpanggilan. Kedua echoperintah hanya menulis ke deskriptor file yang sudah dibuka. Karena itu file ftidak akan terpotong oleh salah satu echopanggilan.

Untuk mengarahkan output standar ke deskriptor file, sintaksisnya adalah >&ntempat nbilangan bulat positif kecil yang menunjukkan deskriptor file (tidak ada >>&nredirection). Deskriptor file harus sudah dikaitkan dengan file yang dibuka agar ini berfungsi. Ini adalah tindakan membuka file dan mengaitkannya dengan deskriptor dengan exec 3>fyang memotong file ( exec 3>>ftidak akan memotong file dan akan membukanya dalam mode-append). Hanya menulis dengan >&3tidak 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 execsebelum masing-masing echo).

Kusalananda
sumber