Il y a les utilitaires standards true
et false
. Le premier ne fait que renvoyer un état de sortie de 0 pour une exécution réussie, le second ne fait que renvoyer une valeur non nulle indiquant un résultat non réussi. Vous voulez probablement le premier.
Bien que certains systèmes qui veulent vraiment que vous saisissiez du texte (messages de validation, etc.) vérifieront si le fichier "modifié" a été réellement modifié et exécuteront simplement true
ne volerait pas dans ce cas. Au lieu de cela, touch
pourrait fonctionner; il met à jour les horodatages de tous les fichiers qu'il reçoit en tant qu'arguments.
Cependant, si l'éditeur obtient d'autres arguments que le nom de fichier touch
créerait ceux-ci sous forme de fichiers. De nombreux éditeurs prennent en charge un argument comme +NNN
pour dire à la ligne initiale de placer le curseur, et ainsi l'éditeur peut être appelé comme $EDITOR +123 filename.txt
. (Ex. less
fait cela, git
ne semble pas.)
Notez que vous voudrez utiliser true
, pas par ex. /bin/true
. Tout d'abord, si un shell est impliqué, spécifier la commande sans chemin permettra au shell d'utiliser une implémentation intégrée, et si un shell n'est pas utilisé, le fichier binaire se trouvera dans PATH
De toute façon. Deuxièmement, tous les systèmes n'ont pas /bin/true
; par exemple. sur macOS, c'est /usr/bin/true
. (Merci @jpaugh.)
(* ou comme le dit la page de manuel GNU, false "[ne fait] rien, sans succès". Merci @8bittree.)
Dans le shell, vous pouvez utiliser le :
intégré . Ce n'est pas un fichier exécutable, mais dans un script shell ou tout ce qui est exécuté à partir d'un script shell, cela fera l'affaire :
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Ceci est peut-être mieux connu pour être utilisé dans une instruction while (while :; do break; done
), mais n'est pas limité à une telle utilisation. Au cas où vous auriez besoin de le faire plusieurs fois, il est beaucoup plus rapide de ne pas démarrer un processus séparé :
$ time for i in $(seq 1000); do :; done
real 0m0,007s
user 0m0,002s
sys 0m0,004s
$ time for i in $(seq 1000); do /bin/true; done
real 0m0,686s
user 0m0,462s
sys 0m0,217s
La suggestion de @ilkkachu d'utiliser le true
command est probablement la meilleure réponse, mais vous pouvez également utiliser la commande
sleep 0