これらの2つのコマンドは、ファイルをゼロにする方法に違いがありますか?後者は前者を行うためのより短い方法ですか?舞台裏で何が起こっているのですか?
両方
$ cat /dev/null > file.txt
$ > file.txt
収量
-rw-r--r-- 1 user wheel 0 May 18 10:33 file.txt
承認された回答:
cat /dev/null > file.txt
猫の無駄な使い方です。
基本的にcat /dev/null
単にcat
になります 何も出力しません。はい、機能しますが、不要な外部プロセスを呼び出す結果になるため、多くの人に嫌われています。
これは、一般的であるという理由だけで一般的であるものの1つです。
> file.txt
だけを使用する ほとんどのシェルで動作しますが、完全に移植できるわけではありません。完全にポータブルにしたい場合は、次の方法が適しています。
true > file.txt
: > file.txt
両方の:
およびtrue
データを出力せず、シェルビルトインです(cat
は外部ユーティリティです)、したがって、より軽量で「適切」です。
更新:
tylerlが彼のコメントで述べたように、>| file.txt
構文。
ほとんどのシェルには、>
を介して既存のファイルを切り捨てないようにする設定があります 。 >|
を使用する必要があります 代わりは。これは、実際に>>
を追加するつもりだったときに人為的エラーを防ぐためです。 。 set -C
を使用して動作をオンにできます 。
したがって、これを使用すると、ファイルを切り捨てる最も簡単で、最も適切で、移植可能な方法は次のようになると思います。
:>| file.txt