Tại sao bash chuyển hướng đến một tập tin xảy ra trong chế độ chắp thêm


Câu trả lời:


19

Điều bạn thiếu là bạn chỉ mở (và cắt) tệp fmột lần, trong execcuộc gọi. Hai echolệnh chỉ ghi vào một mô tả tập tin đã mở. fDo đó, tệp sẽ không bị cắt bởi một trong hai echocuộc gọi.

Để chuyển hướng đầu ra tiêu chuẩn để một bộ mô tả tập tin, cú pháp là >&nnơi nlà một số nguyên dương nhỏ biểu thị mô tả tập tin (không có >>&nchuyển hướng). Bộ mô tả tệp phải được liên kết với một tệp đã mở để nó hoạt động. Đó là hành động mở tệp và liên kết nó với một mô tả với exec 3>fviệc cắt bớt tệp đó ( exec 3>>fsẽ không cắt bớt tệp và sẽ mở tệp ở chế độ chắp thêm). Chỉ viết với >&3không mở tập tin cũng không cắt nó.

Nó sẽ khác đi nếu bạn làm

echo foo >f
echo bar >f
cat f

(mỗi cái echođang mở và cắt ngắn f), hoặc, phức tạp hơn,

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(tập tin được mở và cắt exectrước mỗi lần echo).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.