it-swarm.com.de

Warum kann man beim Erstellen einer leeren Datei "Touch-Datei" gegenüber ": >> Datei" bevorzugen?

Ich habe bis jetzt nie realisiert, dass Sie dies tun können:

: >> file

Es scheint funktional ähnlich zu sein:

touch file

Gibt es einen Grund, warum die meisten Ressourcen den Touch gegenüber dieser integrierten Shell bevorzugen?

33
Harold Fischer

Sie müssen nicht einmal : Verwenden. Sie können nur > file (zumindest in bash; andere Shells verhalten sich möglicherweise anders).

In der Praxis gibt es hier keinen wirklichen Unterschied (obwohl der winzige Aufwand beim Aufrufen von /bin/touch Eine Sache ist).

touch kann jedoch auch verwendet werden, um die Zeitstempel einer bereits vorhandenen Datei zu ändern, ohne den Inhalt zu ändern oder zu löschen. Außerdem wird > file alle bereits vorhandenen file ausblasen. Dies kann umgangen werden, indem stattdessen >> file Verwendet wird.

Ein weiterer Unterschied zu touch besteht darin, dass Sie mehrere Dateien gleichzeitig erstellen (oder den Zeitstempel aktualisieren) können (z. B. touch foo bar baz quux), Und zwar mit einer prägnanteren Syntax als bei der Umleitung, bei der jede Datei benötigt wird eine eigene Umleitung (zB >foo >bar >baz >quux).

Verwenden von 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

Umleitung verwenden:

$ > 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
47
DopeGhoti

Weil Sie touch mehrere Dateien gleichzeitig ausführen können, ohne zusätzliche Sonderzeichen eingeben zu müssen. Dies schließt Dinge wie die Erweiterung der Zahnspange ein, z. touch file{1,2,3,4}.

Ein weiteres Problem ist, dass es beim Schreiben eines Tutorials ziemlich wichtig ist, sich darüber im Klaren zu sein, dass Ihre Leser wahrscheinlich nicht sehr gut mit dem Thema vertraut sind. Ein einfacher Befehl kann viel verständlicher sein als eine seltsam aussehende Kombination von Nicht-Buchstaben-Zeichen. Ich würde erwarten, dass es eine Reihe von gelegentlichen Shell-Benutzern gibt, die nicht wissen, was : Ist, aus dem einfachen Grund, dass es nicht wirklich do irgendetwas ist. Ähnliches gilt für eine einfache > foo Ohne Befehl: Selbst wenn Sie wissen, was eine Umleitung ist, kann eine Umleitung ohne Quelle nicht intuitiv sein.

Außerdem schreiben wir hier auf unix.se häufig Befehlsproben mit einem führenden Dollarzeichen, um die Eingabeaufforderung anzuzeigen. Sonderzeichen am Zeilenanfang könnten damit verwechselt werden. (Beachten Sie, dass es Systeme und Shells gibt, die > Als Teil der Standardaufforderung verwenden.)

32
ilkkachu

Für mich ist der Hauptgrund die Lesbarkeit. Mit touch file Sie wissen, was los ist, selbst jemand, der nicht in Shell-Skripten geschult ist, weiß, was los ist. Und wenn nicht, ist es einfach, man touch und sehen Sie dies:

A FILE argument that does not exist is created empty

Mit dem kryptischen Zeug wie : und >, es ist schwieriger zu wissen, was los ist, und da es keinen wirklichen Vorteil gibt, besteht keine Notwendigkeit, dies zu nutzen.

18
yo'

Stellen Sie sich vor, Sie suchen nach einem Ihrer alten Shell-Skripte, von denen Sie sich nur daran erinnern, dass eine Markierungsdatei in/tmp erstellt wird. Es ist einfach, alle Ihre * .sh-Dateien nach dem Wort "touch" zu durchsuchen. Wenn Sie stattdessen nach einem Doppelpunkt suchen, werden viele Fehlalarme angezeigt, wenn Sie nicht genau wissen, nach welchem ​​Dateinamen Sie suchen sollen.

6
B from C