45 votes

Comment changer rapidement le premier mot d'une commande Bash ?

J'aimerais améliorer un peu mon flux de travail avec Bash, et je me rends compte que je veux souvent exécuter la même commande dans un exécutable différent.

Quelques exemples :

Git (où je voudrais changer rapidement le deuxième mot) :

git diff     foo/bar.c
git checkout foo/bar.c

Cat/rm (où seul le premier mot doit être modifié) :

cat foo/is/a/very/long/path/to/bar.c
rm  foo/is/a/very/long/path/to/bar.c

Je sais que je peux frapper Ctrl + a puis Del pour supprimer le premier mot, mais je me demande s'il n'y a pas un moyen plus rapide de le faire.

57voto

Spiff Points 95683

!$ s'étend jusqu'au dernier mot de votre commande précédente.

Vous pouvez donc le faire :

cat foo/is/a/very/long/path/to/bar.c

rm !$

ou :

git diff foo/bar.c

git checkout !$

Il se trouve que vos exemples ne reprennent que le dernier mot, donc !$ a bien fonctionné. Si vous aviez beaucoup d'arguments à répéter, et que vous vouliez seulement changer le premier mot, vous pourriez utiliser !* qui s'étend à tous les mots de la commande précédente, à l'exception du douzième.

Voir la section "EXPANSION DE L'HISTOIRE" du site web de la Commission européenne. bash page de manuel. Il y a beaucoup de flexibilité là-dedans.

29voto

jjlin Points 14572

Ctrl + a pour aller au début de la ligne, puis Alt + d pour supprimer le premier mot.

17voto

OddOneIn Points 301

Je ne sais pas si cela serait réellement plus rapide ou non, mais je vois cet article, en particulier le point #.3 :

  1. Remplacer une chaîne de caractères de la commande précédente en utilisant ^str1^str2^.

Dans l'exemple suivant, nous avons d'abord exécuté la commande fichier. Plus tard, nous nous sommes rendu compte que nous voulions voir le contenu du fichier. Au lieu de taper à nouveau le nom complet du fichier, nous pouvons simplement remplacer la commande "ls" dans la commande précédente par "cat", comme indiqué ci-dessous.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

16voto

Hastur Points 17791

Alt + .

Si vous avez seulement besoin de répéter la dernière partie d'une des commandes précédentes, vous pouvez utiliser Alt + . qui collera le dernier argument tiré de la dernière ligne de l'historique.

Si vous appuyez sur cette touche plus d'une fois, vous remplacerez ce qui vient d'être collé par le dernier argument de la ligne qui précède...

Par exemple, si les 2 dernières commandes étaient :

cat foo/is/a/very/long/path/to/bar.c
pico foo/is/a/very/long/path/to/SomeWhereElse.c

Dans le Shell, j'écris rm et j'appuie sur Alt + . il apparaîtra :

rm foo/is/a/very/long/path/to/SomeWhereElse.c

si j'appuie à nouveau Alt + . il apparaîtra à la place

rm foo/is/a/very/long/path/to/bar.c

et ainsi de suite...

12voto

maiki Points 421

En plus de la réponse de @jjlin, vous pourriez être intéressé par les conseils suivants :

  • Ctrl + w supprime le mot à votre gauche
  • Ctrl + k supprime du curseur jusqu'à la fin de la ligne de commande
  • Ctrl + u supprime à partir du curseur jusqu'au début de la ligne de commande
  • Alt + b déplace le curseur d'un mot vers l'arrière
  • Alt + f déplace le curseur d'un mot vers l'avant
  • $_ contient le dernier argument de la ligne de commande précédente

Pour en savoir plus, consultez la section "Noms des commandes en ligne" de la page bash page de manuel.

eg :

cat foo/is/a/very/long/path/to/bar.c
rm $_

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X