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 ne peux pas savoir où le point d'exclamation est utilisé, que représente-t-il en termes d'actions entreprises par bash et où l'utiliser. Dans la documentation, je ne vois pas d'explication "tangible".
!
est une fonctionnalité qui est apparue à l'origine dans C Shell , à 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 regarder 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'utilisation de la fonctionnalité.
Une variante de celui-ci que vous pourriez trouver utile est !!
, qui réexécute la commande précédente. À lui seul, je ne trouve pas !!Enter plus vite que juste ↑Enter, mais il peut être utile lorsqu'il est combiné dans une commande plus importante.
Exemple: Un système courant erreur pilote sur Sudo
est à oublier le préfixe Sudo
sur une commande qui nécessite des privilèges supplémentaires. Un novice retape toute la commande. L'élève assidu édite la commande à partir de l'historique des commandes du Shell. L'éclairé tape Sudo !!
.
Bash vous permet de désactiver !
traitement dans le shell avec set +o histexpand
ou set +H
. Vous pouvez le désactiver dans Zsh avec set -K
.
S'il n'y a pas de réponse plus longue ici, il y en a certainement une sur Super User, puisque j'en ai lu une récemment. Dans la page de manuel bash vous pouvez trouver une énorme section intitulée EXPANSION D'HISTOIRE sur la question.
Vous pouvez faire un hôte entier plus que simplement exécuter la dernière commande ou le numéro de commande X. Vous pouvez faire des choses comme !cat
pour exécuter la dernière commande commençant par cat
. Ou !?bash?:s/bash/csh/
exécute la dernière commande contenant bash
mais la remplace par csh
.
Beaucoup plus peut être fait avec !
tel que:
!-3
!ls
et beaucoup plus. Voir 15 exemples d'extension d'historique de Bash Linux que vous devriez connaître
Bien sûr, vous pouvez faire !!
pour réutiliser la dernière commande dans bash Shell. Et puis il y a !$
pour réutiliser la dernière partie de votre dernière commande.
par exemple. voir un fichier
less path/to/your/file.txt
Si vous souhaitez maintenant modifier le même fichier, vous pouvez utiliser !$
pour obtenir uniquement le chemin du fichier à partir de la dernière commande
vim !$
ÉDITER:
Vous pouvez utiliser tous les arguments de la commande précédente avec !*
par exemple: cela créera des fichiers et les supprimera tous
$ touch a.txt b.txt c.txt d.txt
$ rm !*
Encore une fois, vous pouvez utiliser un argument spécifique de la commande précédente
par exemple. Cela crée 4 fichiers et supprimera le 3ème fichier (c.txt)
$ touch a.txt b.txt c.txt d.txt
$ rm !:3
De même, vous pouvez utiliser une plage d'arguments de la dernière commande comme suit
$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4
Cela réutilisera les arguments 2 à 4 qui évaluent l'expression à rm b.txt c.txt d.txt
Un de mes amis m'a envoyé ceci:
Cela fait partie de la bibliothèque GNU history. En bash, il est utilisé pour réexécuter des commandes dans votre historique. Si vous voulez être hardcore, grep pour history_expansion_char dans bash-4.1/lib/readline/histexpand .c pour les détails d'implémentation.