今までこれを行うことができることに気づかなかった:
: >> file
機能的には次のようになります。
touch file
ほとんどのリソースがこのShellビルトインよりもタッチを好むように見える理由はありますか?
:
を使用する必要すらありません。 > file
だけを使用できます(少なくともbash
では、他のシェルは異なる動作をする場合があります)。
実際には、ここでは実際の違いはありません(ただし、/bin/touch
を呼び出す際のわずかなオーバーヘッドは問題になります)。
ただし、touch
を使用して、内容を変更または消去せずに、既存のファイルのタイムスタンプを変更することもできます。さらに、> file
は、すでに存在するfile
をすべて消去します。これは>> file
を使用することで回避できます。
touch
とのもう1つの違いは、リダイレクションよりも簡潔な構文で複数のファイルを同時に作成(またはタイムスタンプを更新)できることです(たとえば、touch foo bar baz quux
)。独自のリダイレクト(例:>foo >bar >baz >quux
)。
touch
の使用:
$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
File: "foo"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (991148597/redacted) Gid: (1640268302/redacted)
Device: 1,5 Inode: 8597208698 Links: 1
Access: Fri May 25 10:55:19 2018
Modify: Fri May 25 10:55:19 2018
Change: Fri May 25 10:55:19 2018
File: "foo"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (991148597/redacted) Gid: (1640268302/redacted)
Device: 1,5 Inode: 8597208698 Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:55:21 2018
Change: Fri May 25 10:55:21 2018
リダイレクトの使用:
$ > foo; stat -x foo; sleep 2; >> foo; stat -x foo
File: "foo"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (991148597/redacted) Gid: (1640268302/redacted)
Device: 1,5 Inode: 8597208698 Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
File: "foo"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (991148597/redacted) Gid: (1640268302/redacted)
Device: 1,5 Inode: 8597208698 Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
余分な特殊文字を入力しなくても、一度に複数のファイルをtouch
できるからです。これには、ブレース展開などが含まれます。 touch file{1,2,3,4}
。
もう1つの問題は、チュートリアルを書いているときに、読者が主題にあまり精通していないことを認識することがかなり重要であることです。単純なコマンドは、文字以外の文字の奇妙に見える組み合わせよりもはるかに理解しやすい場合があります。実際にはdo何もしないという単純な理由から、:
が何であるかを知らないカジュアルなシェルユーザーが多数いると思います。同様に、コマンドのない単純な> foo
の場合:リダイレクトが何であるかを知っていても、リダイレクトsourceなしは直感的でない場合があります。
また、ここunix.seでは、プロンプトを示すために、先頭にドル記号を付けてコマンドサンプルを記述することがよくあります。行頭の特殊文字は混乱するかもしれません。 (デフォルトのプロンプトの一部として>
を使用するシステムとシェルがあることに注意してください。)
まあ、私にとって、主な理由は読みやすさです。 touch file
を使用すると、何が起こっているかがわかります。シェルスクリプトの知識があまりない人でも、何が起こっているのかを知っています。そうでない場合は、man touch
を実行して簡単に確認できます。
A FILE argument that does not exist is created empty
:
や>
などの不可解なものを使用すると、何が起こっているのかを知るのが難しくなります。実際の利点がないため、それを使用する必要はありません。
/ tmpにマーカーファイルが作成されていることだけを覚えている古いシェルスクリプトの1つを探しているとします。 Wordの "touch"用にすべての* .shファイルをgrepするのは簡単です。検索する正確なファイル名がわからない場合は、代わりにコロンを入力すると、多くの誤検知が発生します。