Comment puis-je rappeler l'argument de la commande bash précédente?


312

Existe-t-il un moyen dans Bash de rappeler l'argument de la commande précédente?

Je fais habituellement vi file.csuivi par gcc file.c.

Existe-t-il un moyen dans Bash de rappeler l'argument de la commande précédente?


2
Copie

Réponses:


562

Vous pouvez utiliser $_ou !$pour rappeler le dernier argument de la commande précédente.

Alt + .Peut également être utilisé pour rappeler le dernier argument de l'une des commandes précédentes.


121
En outre, si vous voulez un argument arbitraire, vous pouvez utiliser !!:1, !!:2etc. ( !!:0est la commande précédente lui - même.) Voir gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Similaire à !$, vous utilisez !^pour le premier argument.
Le

13
ahh ... * nix ... tu es une chose de beauté ... tous les jours je t'aime plus
jx12345

Comment peut-on se référer à l'avant-dernier argument de la commande précédente? par exemple, si j'ai donné echo tiger rabbit, comment puis-je me référer tigerà la commande suivante?
Chan Kim

3
Alt + .ne fonctionne pas en mode vi. Juste pour info, pour les autres qui étaient confus ici.
Brian McCutchon

160

Si la commande précédente avait deux arguments, comme celui-ci

ls a.txt b.txt

et vous vouliez le premier, vous pouvez taper

!:1

donnant

a.txt

Ou si vous vouliez les deux, vous pouvez taper

!:1-2

donnant

a.txt b.txt

Vous pouvez l'étendre à n'importe quel nombre d'arguments, par exemple:

!:10-12

@RNA, je viens de l'essayer à nouveau pour m'assurer que je n'ai pas inclus de faute de frappe, pourriez-vous fournir un peu plus de détails (par exemple, ligne de commande ubuntu, cygwin pour Windows? Message d'erreur? Ligne précédente?)
Robert Gowland

J'utilise GNU bash, version 3.2.51 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Le message d'erreur est-bash: :1-2: bad word specifier
RNA

2
J'obtiens la même chose s'il n'y avait pas deux arguments dans la ligne précédente. Par exemple. ligne 1 ls a.txtligne 2ll !:1-2
Robert Gowland

vous avez raison. C'est une stupide erreur que j'ai commise. Merci!
RNA

Également pour obtenir tous les arguments, !:^-$peut être utilisé ou bien sûr un code similaire en combinaison avec des nombres.
816-8055

88

!!:nnest la position 0 de l'argument souhaité.

Par exemple:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Le !préfixe est utilisé pour accéder aux commandes précédentes.

Autres commandes utiles:

  • !$ - dernier argument de la commande précédente
  • !^ - premier argument (après le programme / intégré / script) de la commande précédente
  • !! - commande précédente (souvent prononcée "bang bang")
  • !n- numéro nde commande dehistory
  • !pattern - correspondance de commande la plus récente pattern
  • !!:s/find/replace- dernière commande, remplacer findparreplace

Plus d'informations sur l'historique des commandes


7
Au lieu de cela !!:s/find/replace, vous pouvez également ^find^replace.
Big McLargeHuge

Aussi: !* - tous les arguments de la commande précédente (après le programme / intégré / script). par exemple: ls *.tmp *.cache rm !*
Aphoid

68

Dans la ligne de commande, vous pouvez appuyer sur esc- .ou alt+.

Il parcourt le dernier argument de vos commandes précédentes.


J'ai toujours trouvé que les touches et fonctionnent également.
Bucket

Les clés @Bucket passent par les commandes précédentes, tandis que la solution fournie par Antonio permet de parcourir les arguments précédents (dernier argument de chaque commande précédente uniquement)
everyonesdesign

30

Si vous connaissez le numéro donné dans l'historique pour une commande particulière, vous pouvez à peu près prendre n'importe quel argument de cette commande en utilisant les termes suivants.

Utilisez ce qui suit pour prendre le deuxième argument de la troisième commande de l'historique,

!3:2

Utilisez ce qui suit pour prendre le troisième argument de l'avant-dernière commande de l'historique,

!-5:3

En utilisant un signe moins, vous lui demandez de parcourir la dernière commande de l'historique.


19

! * exécute une nouvelle commande avec tous les arguments précédents.

ls /tmp
cd !*
#you are now in /tmp

Cela n'a pas fonctionné pour moi sur OSX - a dû utiliser à la $_place.
Mike W

16

Oui, vous pouvez utiliser !$pour rappeler le dernier argument de la commande précédente.


Soyez conscient du mot clé "last", surtout si votre commande contient plusieurs arguments.
Bucket
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.