Je n'avais jamais réalisé que vous pouviez faire cela jusqu'à maintenant:
: >> file
Il semble être fonctionnellement similaire à:
touch file
Y a-t-il une raison pour laquelle la plupart des ressources semblent préférer toucher à ce shell intégré?
Vous n'avez même pas besoin d'utiliser :
; vous pouvez simplement > file
(au moins dans bash
; d'autres shells peuvent se comporter différemment).
Sur le plan pratique, il n'y a pas de réelle différence ici (bien que les minuscules frais généraux de l'appel à /bin/touch
est une chose).
touch
, cependant, peut également être utilisé pour modifier les horodatages d'un fichier qui existe déjà sans changer ou effacer le contenu; plus loin, > file
fera exploser tout file
qui existe déjà. Cela peut être contourné en utilisant à la place >> file
.
Une autre différence avec touch
est que vous pouvez le faire créer (ou mettre à jour l'horodatage) plusieurs fichiers à la fois (par exemple touch foo bar baz quux
) avec une syntaxe plus succincte qu'avec la redirection, où chaque fichier a besoin de sa propre redirection (par exemple >foo >bar >baz >quux
).
Utilisation de 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
Utilisation de la redirection:
$ > 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
Parce que vous pouvez touch
plusieurs fichiers à la fois sans taper de caractères spéciaux supplémentaires. Cela inclut des choses comme l'expansion de l'accolade, par exemple touch file{1,2,3,4}
.
Un autre problème est que lorsque vous écrivez un didacticiel, il est plutôt important de réaliser que vos lecteurs ne sont probablement pas très familiarisés avec le sujet. Une simple commande peut être beaucoup plus compréhensible qu'une combinaison étrange de caractères non-lettre. Je m'attends à ce qu'il y ait un certain nombre d'utilisateurs de Shell occasionnels qui ne savent pas ce que :
est, pour la simple raison qu'il ne fait pas vraiment faire quoi que ce soit. De même pour un simple > foo
sans commande: même si vous savez ce qu'est une redirection, une redirection sans source peut ne pas être intuitive.
Ici aussi, sur unix.se, nous écrivons souvent des exemples de commandes avec un signe dollar pour indiquer l'invite. Les caractères spéciaux au début de la ligne peuvent être confondus avec cela. (Notez qu'il existe des systèmes et des shells qui utilisent >
dans le cadre de l'invite par défaut.)
Eh bien, pour moi, la raison principale est la lisibilité. Avec touch file
vous savez ce qui se passe, même quelqu'un qui n'est pas très formé aux scripts Shell sait ce qui se passe. Et sinon, c'est facile à faire man touch
et voyez ceci:
A FILE argument that does not exist is created empty
Avec les trucs cryptiques comme :
et >
, il est plus difficile de savoir ce qui se passe, et comme il n'y a aucun avantage réel, il n'est pas nécessaire de l'utiliser.
Imaginez que vous recherchez l'un de vos anciens scripts Shell dont vous vous souvenez seulement qu'un fichier marqueur dans/tmp est en cours de création. Il est facile de grep tous vos fichiers * .sh pour le mot "touch". À la place, chercher un deux-points donnera de nombreux faux positifs si vous ne savez pas quel nom de fichier exact rechercher.