La plupart des réponses ici [ 1 ] [ 2 ] [ 3 ] utilisent une parenthèse angulaire simple pour rediriger vers / dev / null, comme ceci:
command > /dev/null
Mais l'ajout à / dev / null fonctionne aussi:
command >> /dev/null
À part le caractère supplémentaire, y a-t-il une raison de ne pas le faire? Est-ce que l'une ou l'autre de ces options est "plus agréable" pour l'implémentation sous-jacente de / dev / null?
Edit:
L' open (2) manpage dit lseek est appelée avant chaque écriture dans un fichier en mode append:
O_APPEND
Le fichier est ouvert en mode ajout. Avant chaque écriture (2), le décalage de fichier est positionné à la fin du fichier, comme avec lseek (2). La modification de l'offset de fichier et l'opération d'écriture sont effectuées en une seule étape atomique.
ce qui me fait penser qu'il pourrait y avoir une minuscule pénalité de performance pour l'utilisation >>
. Mais d'un autre côté, tronquer / dev / null semble être une opération non définie selon ce document:
O_TRUNC
Si le fichier existe déjà et est un fichier normal et que le mode d'accès permet l'écriture (c'est-à-dire O_RDWR ou O_WRONLY), il sera tronqué à la longueur 0. Si le fichier est un fichier FIFO ou de périphérique terminal, l'indicateur O_TRUNC est ignoré. Sinon, l'effet de O_TRUNC n'est pas spécifié.
et la spécification POSIX dit >
doit tronquer un fichier existant , mais O_TRUNC est défini par l'implémentation pour les fichiers de périphérique et il n'y a pas de mot sur la façon dont / dev / null devrait répondre à la tronquage .
Donc, tronquer / dev / null n'est-il pas réellement spécifié? Et les appels lseek ont-ils un impact sur les performances d'écriture?
la source