¿Son estos dos comandos diferentes en la forma en que se ponen a cero los archivos? ¿Es esto último una forma más corta de hacer lo primero? ¿Qué está pasando detrás de escena?
Ambos
$ cat /dev/null > file.txt
$ > file.txt
rendimiento
-rw-r--r-- 1 user wheel 0 May 18 10:33 file.txt
Respuesta aceptada:
cat /dev/null > file.txt es un uso inútil de cat.
Básicamente cat /dev/null simplemente da como resultado cat dando salida a nada. Sí, funciona, pero muchos lo desaprueban porque da como resultado la invocación de un proceso externo que no es necesario.
Es una de esas cosas que son comunes simplemente porque son comunes.
Usando solo > file.txt funcionará en la mayoría de las carcasas, pero no es completamente portátil. Si quieres que sea completamente portátil, las siguientes son buenas alternativas:
true > file.txt
: > file.txt
Ambos : y true no generan datos y son componentes internos de shell (mientras que cat es una utilidad externa), por lo que son más ligeros y más "apropiados".
Actualización:
Como tylerl mencionó en su comentario, también está el >| file.txt sintaxis.
La mayoría de los shells tienen una configuración que les impide truncar un archivo existente a través de > . Debe usar >| en cambio. Esto es para evitar errores humanos cuando realmente quería agregar con >> . Puede activar el comportamiento con set -C .
Entonces, con esto, creo que el método más simple, adecuado y portátil para truncar un archivo sería:
:>| file.txt