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