Більшість відповідей тут [ 1 ] [ 2 ] [ 3 ] використовують однокутний кронштейн для переадресації на / dev / null, наприклад:
command > /dev/null
Але додавання до / dev / null також працює:
command >> /dev/null
За винятком зайвого персонажа, чи є причина не робити цього? Чи будь-який з цих "приємніших" до основної реалізації / dev / null?
Edit: відкрито (2) сторінка керівництво каже lseek викликається перед кожним записом в файл в режимі додавання:
O_APPEND
Файл відкривається в режимі додавання. Перед кожним записом (2) зміщення файлу розміщується в кінці файлу, як би з lseek (2). Модифікація зміщення файлу та операція запису виконуються як один атомний крок.
що змушує мене думати, що за використання може бути невеликий штраф за продуктивність >>
. Але з іншого боку, обрізання / dev / null видається невизначеною операцією відповідно до цього документа:
O_TRUNC
Якщо файл вже існує і є звичайним файлом, а режим доступу дозволяє записувати (тобто є O_RDWR або O_WRONLY), він буде усічений на довжину 0. Якщо файл - файл FIFO або термінальний пристрій, прапор O_TRUNC ігнорується. В іншому випадку ефект O_TRUNC не визначений.
і специфікація POSIX говорить , що слід усікати >
існуючий файл , але O_TRUNC визначається реалізацією для файлів пристроїв, і немає слова про те, як / dev / null повинен відповідати на усічення .
Отже, чи справді не визначено обрізання / dev / null? І чи впливають дзвінки lseek на продуктивність запису?