Questi due comandi sono diversi su come azzerare i file? Il secondo è un modo più breve di fare il primo? Cosa sta succedendo dietro le quinte?
Entrambi
$ cat /dev/null > file.txt
$ > file.txt
resa
-rw-r--r-- 1 user wheel 0 May 18 10:33 file.txt
Risposta accettata:
cat /dev/null > file.txt
è un uso inutile di cat.
Fondamentalmente cat /dev/null
risulta semplicemente in cat
non emettendo nulla. Sì, funziona, ma è disapprovato da molti perché si traduce nell'invocare un processo esterno che non è necessario.
È una di quelle cose che è comune semplicemente perché è comune.
Usando solo > file.txt
funzionerà sulla maggior parte delle shell, ma non è completamente portatile. Se vuoi essere completamente portatile, le seguenti sono buone alternative:
true > file.txt
: > file.txt
Entrambi :
e true
non generano dati e sono incorporati nella shell (mentre cat
è un'utilità esterna), quindi sono più leggeri e più "corretti".
Aggiornamento:
Come menzionato da Tylerl nel suo commento, c'è anche il >| file.txt
sintassi.
La maggior parte delle shell ha un'impostazione che impedirà loro di troncare un file esistente tramite >
. Devi usare >|
invece. Questo serve a prevenire l'errore umano quando volevi davvero aggiungere >>
. Puoi attivare il comportamento con set -C
.
Quindi, con questo, penso che il metodo più semplice, appropriato e portatile per troncare un file sarebbe:
:>| file.txt