Większość odpowiedzi tutaj [ 1 ] [ 2 ] [ 3 ] używa pojedynczego nawiasu kątowego, aby przekierowywać do / dev / null, jak poniżej:
command > /dev/null
Ale dołączanie do / dev / null również działa:
command >> /dev/null
Czy oprócz dodatkowego charakteru istnieje jakiś powód, aby tego nie robić? Czy któryś z nich jest „ładniejszy” w stosunku do implementacji / dev / null?
Edit: open (2) podręcznika mówi lseek nazywa się przed każdym zapisie do pliku w trybie dopisywania:
O_APPEND
Plik jest otwierany w trybie dołączania. Przed każdym zapisem (2) przesunięcie pliku jest ustawiane na końcu pliku, tak jak w przypadku lseek (2). Modyfikacja przesunięcia pliku i operacja zapisu są wykonywane jako pojedynczy krok atomowy.
co sprawia, że myślę, że może być niewielka kara za wydajność >>
. Ale z drugiej strony obcinanie / dev / null wydaje się niezdefiniowaną operacją według tego dokumentu:
O_TRUNC
Jeśli plik już istnieje i jest zwykłym plikiem, a tryb dostępu umożliwia zapis (tzn. Jest to O_RDWR lub O_WRONLY), zostanie obcięty do długości 0. Jeśli plik jest plikiem FIFO lub plikiem urządzenia końcowego, flaga O_TRUNC jest ignorowana. W przeciwnym razie efekt O_TRUNC nie jest określony.
a specyfikacja POSIX mówi >
, że powinien obciąć istniejący plik , ale O_TRUNC jest zdefiniowany dla implementacji plików urządzeń i nie ma słowa o tym, jak / dev / null powinien zareagować na obcięcie .
Czy obcięcie / dev / null faktycznie nie jest określone? I czy wywołania Lseek mają jakiś wpływ na wydajność zapisu?
źródło