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

!!:noù nest 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.