J'ai utilisé
history | less
pour obtenir les lignes des commandes précédentes et à partir des chiffres sur le côté gauche, j'ai trouvé la ligne que je voulais répéter (par exemple 22) et l'ai fait
!22
à l'invite de commande et cela a fonctionné - en exécutant l'ensemble de commandes sur la ligne que j'ai faite à ce moment-là. Je n'arrive pas à comprendre où le point d'exclamation est utilisé, ce qu'il représente en termes d'actions prises par bash et où l'utiliser. Dans la documentation, je ne vois pas d'explication "tangible".
Réponse acceptée :
!
invoque l'expansion de l'historique, une fonctionnalité apparue à l'origine dans le shell C, à l'époque où vous pouviez compter sur les terminaux pour avoir des touches fléchées. C'est particulièrement utile si vous ajoutez le numéro de commande actuel à l'invite (PS1="!$ "
) afin que vous puissiez rapidement consulter votre écran pour obtenir les numéros des commandes passées.
Maintenant que vous pouvez utiliser les touches fléchées et des choses comme Ctrl-R pour rechercher l'historique des commandes, je ne vois pas beaucoup d'utilité pour la fonctionnalité.
Une variante de celui-ci que vous pourriez encore trouver utile est !!
, qui réexécute la commande précédente. Tout seul, je ne trouve pas ! ! Entrez plus rapide que juste ↑ Entrez , mais cela peut être utile lorsqu'il est combiné dans une commande plus grande.
Exemple : Une erreur de pilote courante sur sudo
systèmes basés est d'oublier le sudo
préfixe sur une commande qui nécessite des privilèges supplémentaires. Un novice retape toute la commande. L'étudiant assidu édite la commande à partir de l'historique des commandes du shell. L'illuminé tape sudo !!
.
Traitement de !
de cette manière est activé dans Bash par défaut dans les shells interactifs et peut être désactivé avec set +o histexpand
ou set +H
. Vous pouvez le désactiver dans Zsh avec set -K
.