人々はなぜ空のファイルを作成するときに「:>>ファイル」の代わりに「タッチファイル」を好むのですか?

人々はなぜ空のファイルを作成するときに「:>>ファイル」の代わりに「タッチファイル」を好むのですか?

これまではこれができることを知りませんでした。

: >> file

機能的には次のように見えます。

touch file

ほとんどのリソースがこの組み込みシェルよりもタッチを好む理由はありますか?

答え1

を使用する必要もありません:> file少なくともWindowsでは、bash他のシェルが異なる動作をする可能性があります。

実際、ここには実質的な違いはありません(たとえ呼び出すオーバーヘッドは小さいですが/bin/touch)。

touchただし、コンテンツを変更または削除せずに、すでに存在するファイルのタイムスタンプを変更するためにも使用でき、すでに存在する> fileすべてのアイテムも削除されます。fileを使用すると、この問題を解決できます>> file

もう1つの違いは、touchリダイレクトよりもきれいな構文を使用して(たとえば)複数のファイルを一度に作成(またはタイムスタンプを更新)できることです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

答え2

touch別の特殊文字を入力しなくても、複数のファイルを一度に処理できるからです。これには、支柱の拡張などがtouch file{1,2,3,4}含まれます。

もう一つの問題は、チュートリアルを書くとき、読者がそのトピックについてよく知らないかもしれないことを認識することが重要であるということです。単純なコマンドは、アルファベットではなく文字の奇妙に見える組み合わせよりも理解しやすいです。:実際にはそうではないという単純な理由から、これが何であるかわからない一般的なシェルユーザーがたくさんいると予想されます。する何もない。同様に、コマンドがない一般的な場合> foo:リダイレクトが何であるかを知っていても、リダイレクトソースなし直感的ではないかもしれません。

また、unix.seでは、プロンプトを表示するためにドル記号の前にコマンド例を作成することがよくあります。行の先頭の特殊文字はこれと混同される可能性があります。 (一部のシステムとシェルではこれを>デフォルトのプロンプトの一部として使用します。)

答え3

まあ、私が一番見る理由は、読みやすさです。何が起こっているのかを知っていれば、touch fileシェルスクリプトの訓練を受けていない人でも何が起こっているのかがわかります。そうでない場合は、以下を実行して確認するのが簡単ですman touch

A FILE argument that does not exist is created empty

:などの秘密のコンテンツを使用すると、>何が起こっているのかを知るのがより難しく、実際の利点がないため、使用する必要はありません。

答え4

古いシェルスクリプトを検索していますが、/ tmpにいくつかのタグファイルを作成したことを覚えていると思います。すべての* .shファイルで "touch"という単語を見つけるのは簡単です。検索する正確なファイル名がわからない場合は、コロンを検索すると誤った肯定が発生します。

関連情報