Hầu hết các câu trả lời ở đây [ 1 ] [ 2 ] [ 3 ] sử dụng dấu ngoặc đơn để chuyển hướng đến / dev / null, như thế này:
command > /dev/null
Nhưng việc thêm vào / dev / null cũng hoạt động:
command >> /dev/null
Ngoại trừ nhân vật phụ, có lý do gì để không làm điều này? Là một trong những "đẹp hơn" cho việc triển khai cơ bản của / dev / null?
Chỉnh sửa:
Các mở (2) manpage nói lseek được gọi là trước mỗi ghi vào một tập tin trong chế độ append:
O_APPEND
Tệp được mở trong chế độ chắp thêm. Trước mỗi lần ghi (2), phần bù tập tin được định vị ở cuối tập tin, như thể với lseek (2). Việc sửa đổi bù tập tin và thao tác ghi được thực hiện dưới dạng một bước nguyên tử.
mà làm cho tôi nghĩ rằng có thể có một hình phạt hiệu suất nhỏ để sử dụng >>
. Nhưng mặt khác, cắt / dev / null có vẻ như là một hoạt động không xác định theo tài liệu đó:
O_TRUNC
Nếu tệp đã tồn tại và là tệp thông thường và chế độ truy cập cho phép ghi (tức là O_RDWR hoặc O_WRONLY), nó sẽ bị cắt ngắn đến độ dài 0. Nếu tệp là tệp FIFO hoặc thiết bị đầu cuối, cờ O_TRUNC sẽ bị bỏ qua. Mặt khác, ảnh hưởng của O_TRUNC là không xác định.
và thông số POSIX cho biết >
sẽ cắt bớt một tệp hiện có , nhưng O_TRUNC được xác định theo thực thi cho các tệp thiết bị và không có thông tin nào về cách / dev / null sẽ phản hồi khi bị cắt ngắn .
Vì vậy, là cắt ngắn / dev / null thực sự không xác định? Và các cuộc gọi lseek có ảnh hưởng gì đến hiệu suất ghi không?