Dans Bash, l'history
La commande est la clé non seulement pour comprendre ce que vous avez fait pendant votre session shell, mais aussi pour la matière première des nouvelles commandes que vous souhaitez exécuter à l'avenir. History
est particulièrement utile lorsque vous utilisez un serveur sans tête. Si vous n'avez pas de souris, vous ne pouvez pas facilement copier et coller la dernière moitié d'une commande complexe pour en exécuter une version légèrement modifiée, vous devez donc tout retaper - à moins que vous n'utilisiez history
modificateurs.
Gardez l'historique hors de votre historique
Avant de discuter de l'historique, voici une astuce pour conserver l'history
littéral entrées de votre historique.
Le problème avec l'utilisation de l'history
commande pour revoir votre history
c'est qu'il ajoute une entrée à votre history
dossier. Ces entrées ne font pas qu'encombrer votre history
, mais ils font également régresser chaque ligne "plus loin" par rapport à votre position actuelle.
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
Une cible en mouvement est difficile à suivre et difficile à atteindre, donc si vous prévoyez d'utiliser sérieusement votre history
pour accélérer vos interactions Bash, ajoutez cette configuration à votre .bashrc
fichier :
export HISTCONTROL=$HISTCONTROL:ignorespace
Cette configuration empêche toute commande précédée d'un espace d'être ajoutée à votre history
Bash .
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$
[ Cours en ligne gratuit :Présentation technique de Red Hat Enterprise Linux. ]
Événements de l'historique
La structure de base du shell history
commence par une liste d'events
. Un event
est tout ce que vous avez entré dans le shell, suivi du Return
ou Enter
clé. Chaque event
se voit attribuer un numéro d'index (un numéro de ligne), et vous pouvez afficher et rappeler des événements en utilisant des event designators
.
Par exemple, pour rappeler un élément de ligne spécifique dans votre shell history
, utilisez un point d'exclamation (!
) suivi immédiatement du numéro de l'history
ligne :
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Vous pouvez également vous référer aux commandes passées par rapport à leur position dans l'history
référencement. Par exemple, pour exécuter une commande deux lignes dans le passé, considérez votre invite actuelle comme une plus grande que la dernière ligne de l'history
, puis soustrayez le numéro de la ligne que vous souhaitez exécuter de votre numéro de ligne actuel. Dans cet exemple, ligne 103 est la ligne cible et 105 est l'invite actuelle (pour un delta de 105-103=2 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Vous pouvez enregistrer un caractère entier si vous souhaitez simplement réexécuter la dernière ligne. L'expression !!
et !-1
sont synonymes :
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Notez que la commande elle-même est répétée dans la sortie lorsque history
est répété. Pour des raisons de brièveté et de clarté, une telle sortie est exclue des autres exemples de cet article.
Désignateurs de mots
Bash a des fonctionnalités pour vous aider à analyser votre history
en utilisant des word designators
, et des outils pour vous permettre de modifier les commandes de votre history
. Il peut être utile de penser à votre shell history
en tant que tableau indexé, ou même en tant qu'objet d'historique volumineux composé de nombreux éléments plus petits. Chaque mot sur chaque ligne de votre history
est indexé, commençant à 0 (ce qui est généralement la commande, mais les commandes en plusieurs parties et les préfixes des variables d'environnement sont des exceptions notables). Vous pouvez accéder à chaque index en ajoutant deux-points (:
) à votre référence de ligne, suivi immédiatement du word designator
.
Voici un exemple d'accès au premier mot :
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Parce que saisir le premier argument est commun, le circonflexe (ou le "chapeau":^
) est un alias pour :1
.
$ echo foo
$ !!^
foo
À l'autre extrémité du spectre, le dollar ($
) signe représente l'argument final :
$ echo foo bar baz
$ echo !!$
baz
Gammes de mots
Vous n'avez pas à vous contenter d'un seul argument. Vous pouvez également extraire les plages d'un index. Tous les arguments sauf le zéro sont disponibles avec un astérisque (*
).
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
C'est en fait un synonyme de 1-$
(c'est-à-dire du premier argument au dernier argument). Comme vous vous en doutez, vous pouvez définir arbitrairement votre plage en utilisant cette notation non abrégée. Cet exemple fait référence au deuxième au cinquième argument, en ignorant le premier et les deux derniers arguments :
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py*
Si vous avez juste besoin d'exclure le dernier mot unique d'un index, vous pouvez fournir une plage sans terminaison :
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh*
Utilisation de l'historique pour la vitesse et la précision
L'history
La commande ne consiste pas toujours à réduire les pressions sur les touches. Vous pouvez utiliser votre history
Bash pour éviter d'exclure accidentellement un fichier ou un dossier d'une opération importante ou de mal orthographier un nom de fichier. Familiarisez-vous avec l'history
commande pour des interactions Bash plus robustes.
[ Voulez-vous essayer Red Hat Enterprise Linux ? Télécharge le maintenant gratuitement. ]