Je suis nouveau sur Linux. Quand je crée un nouveau fichier .gitignore sous le répertoire courant en utilisant bash, j'ai découvert que je peux faire:
> .gitignore
ou
touch .gitignore
Il semble qu'ils font la même chose. Lorsque je vérifie le manuel touch
, il indique changer l'horodatage du fichier actuel, mais il n'y a pas de manuel pour >
. Alors, quelqu'un peut-il expliquer ce qui peut >
faire et y a-t-il une différence dans l'utilisation de ces deux commandes dans ce contexte? Merci.
command-line
Steve Deng Zishi
la source
la source
man bash
. C'est un long document et il faudra des jours, voire des semaines pour bien comprendre, mais cela vaut la peine d'être parcouru si vous voulez apprendre le Bash à fond.Réponses:
>
est l'opérateur de redirection de shell. Voir Quelle est la différence entre ">" et ">>" dans la commande shell? et Quand dois-je utiliser <ou <() ou << et> ou> ()? Il est principalement utilisé pour rediriger la sortie d'une commande vers un fichier. Si le fichier n'existe pas, le shell le crée. S'il existe, le shell le tronque (le vide). Avec just> file
, il n'y a pas de commande, donc le shell crée un fichier, mais aucune sortie ne lui est envoyée, donc l'effet net est la création d'un fichier vide, ou le vidage d'un fichier existant.touch
est une commande externe qui crée un fichier ou met à jour l'horodatage, comme vous le savez déjà. Avectouch
, le contenu du fichier n'est pas perdu, s'il existe, contrairement à>
.Le comportement de
>
dépend du shell. Dans bash, dash et la plupart des shells,> foo
fonctionnera comme prévu. Dans zsh, par défaut,> foo
fonctionne commecat > foo
- zsh attend que vous saisissiez l'entrée.la source
>> file
ettouch file
mais s'ilfile
n'existe pas, il y a une grande différence entre les deux et> file
(en ce que le contenu précédent defile
est perdu). Cela, plus le comportement incohérent des moyens zshtouch file
est le "plus sûr" et devrait donc être mémorisé comme la bonne façon de le faire.Voici une comparaison intéressante:
Résultat:
la source
strace
est censé montrer les appels système qui sont exécutés, et la> file.txt
méthode s'avère être le moins d'appels système exécutés, ce qui n'est vraiment pas si surprenant - plus un outil est complexe, plus ses appels système sont complexes. Le problème avec les exemples montrés, cependant, est que lesstrace
écritures sont diffuséesstderr
par défaut, et dans cette réponse, Steven utilise le tuyau en lecture seulestderr
, donc je suis légèrement confus sur la façon dont il a compté les lignes en utilisant le|
tuyau et non|&
|&
, comme le mentionne @Serg, j'obtiens environ un cinquième de ceux ici ... sauf pour levi
cas, où j'obtiens à peu près la même valeur