Découvrez la dernière commande que j'ai exécutée qui démarre d'une certaine manière?

9

Sur l'environnement de ligne de commande bash, vous pouvez faire !!pour réexécuter votre dernière commande. Et vous pouvez appuyer sur la flèche vers le haut pour voir la dernière commande que vous avez exécutée. Mais que se passe-t-il si vous souhaitez uniquement voir mais ne pas exécuter la dernière commande que vous avez exécutée et qui a commencé d'une certaine manière?

bernie2436
la source
1
Pourriez-vous s'il vous plaît modifier votre question. Je ne comprends toujours pas ce que vous demandez.

Réponses:

19

Si vous recherchez l'historique via Ctrl+ ret en tapant quelques lettres de la commande et non en appuyant Entermais en appuyant sur , la commande apparaîtra et ne s'exécutera pas. Une autre alternative est:

history | grep 'mycommand'

Cette belle histoire antisèche pourrait aussi aider.

mkc
la source
1
Et si vous ne recherchez pas la première correspondance et que vous souhaitez continuer la recherche en arrière, appuyez plusieurs fois sur ctrl-r. Et ce n'est qu'une des nombreuses commandes puissantes fournies par bash history & readline library.
orion
Étant donné que vous avez la réponse vérifiée, je vais tirer la mienne et si vous souhaitez utiliser l' "^.\{7\}pattern"expression dans votre réponse, vous pouvez le faire!
si vous souhaitez modifier plusieurs commandes et les réexécuter, vous pouvez également utiliserfc ### ###
Kiwy
10

Vous pouvez afficher la dernière exécution de la commande, par append :pà !!:

$ echo 123
123
$ !!:p
echo 123

Si vous voulez afficher la dernière commande exécutée avec un certain nom, utilisez une exclamation:

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123
cuonglm
la source
4

Pour autant que je sache, chaque réponse ici n'est pas portable. Pour une option portable, considérez la garantie POSIX fc:

    $ man fc

−e éditeur Utilisez l'éditeur nommé par l' éditeur pour modifier les commandes. La chaîne de l'éditeur est un nom d'utilitaire, sujet à recherche via lavariable PATH ... La valeur de lavariable FCEDIT doit être utilisée par défaut lorsque −e n'est pas spécifié. Si FCEDIT est nul ou non défini , ed doit être utilisé comme éditeur.

−l (La lettre ell.) Liste les commandes plutôt que d'appeler un éditeur dessus. Les commandes doivent être écrites dans l'ordre indiqué par le premier et le dernier opérande, tel qu'affecté par −r , chaque commande étant précédée du numéro de commande.

−n Supprime les numéros de commande lors de l'inscription avec −l .

−r Inverse l'ordre des commandes listées (avec −l ) ou éditées (avec ni −l ni −s ) .

−s Réexécutez la commande sans appeler un éditeur.

OPERANDES

premier , dernier Sélectionnez les commandes à répertorier ou à modifier. Le nombre de commandes précédentes accessibles est déterminé par la valeur de lavariable HISTSIZE . La valeur du premier ou du dernier ou des deux doit être l'une des suivantes:

[+ ou-] nombre Un nombre positif (ou négatif ) représentant un numéro de commande; les numéros de commande peuvent être affichés avec l'option −l ... Par exemple, −1 est la commande immédiatement précédente ...

Lorsque l' option −l est utilisée pour lister les commandes, le format de chaque commande dans la liste doit être le suivant:

    "%d\t%s\n", <line number>, <command>

Si les options −l et −n sont spécifiées, le format de chaque commande doit être:

    "\t%s\n", <command>

Si la se compose de plusieurs lignes, les lignes après la première doivent être affichées comme suit:

    "\t%s\n", <continued-command>

Mais assurez-vous d'utiliser -l ou -e si vous voulez UNIQUEMENT voir / modifier vos commandes. Par défaut fc, la liste de commandes demandée dans FCEDIT sera ouverte (notez qu'elle est distincte de votre variable d'environnement EDITOR ) et, lorsque FCEDIT se fermera , fcexécutera les commandes modifiées.

Quoi qu'il en soit, la réponse à cette question pourrait être:

    % fc -l -1

Ou sans numéro de ligne:

    % fc -ln -1

Ou les cinq dernières commandes dans l'ordre inverse:

    % fc -lrn -1 -5

Dans votre téléavertisseur:

    % fc -lrn -1 -5 |$PAGER

Pour votre dernier appel à fc:

    % fc -l fc
mikeserv
la source
+1 pour l'effort. Cependant, la question est étiquetée bash
grebneke
Cela fonctionne bash, et tout le reste. L'utilisation de bashn'empêche pas la portabilité, mais le développement de mauvaises habitudes le fera certainement.
mikeserv
La meilleure réponse ici doit être acceptée, en raison de la portabilité.
wildeyes
3

appuyez sur Ctrlrpuis commencez à taper la commande que vous souhaitez voir. bash se terminera progressivement. Lorsque vous êtes satisfait, appuyez sur Enterpour le relancer ou Ctrlgpour abandonner.

glenn jackman
la source
2

Si vous voulez juste utiliser la dernière commande:

 history | cut -c 8- | tail -n 2 | head -n 1 

Si vous voulez pouvoir le faire à plusieurs reprises, mettez un espace avant historyou utilisez:

 history | cut -c 8- | grep -Ev '^history' | tail -n 1

Si vous voulez juste voir la dernière commande commençant par pattern xyz:

 history | cut -c 8- | grep -E '^xyz'  | tail -n 1 

Mais cela ne fonctionne pas si le motif correspond aux caractères initiaux de l '«histoire» et que vous avez alors besoin de quelque chose comme:

history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist'  | tail -n 1 
Anthon
la source
Il y a une faute de frappe dans votre première utilisation de cut.
jon
1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

Et puis vous pouvez saisir du texte, puis Alt-prechercher les dernières commandes qui démarrent de la même manière (et Alt-p, Alt-npour les parcourir d'avant en arrière).

(Ce sont les raccourcis clavier par défaut pour des widgets similaires dans zsh)

Stéphane Chazelas
la source
0

Ajoutez ces lignes dans un fichier ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Puis source ~/.inputrcdans votre shell (ou redémarrez simplement le shell).

Vous pouvez maintenant taper quelques lettres de la commande, puis utiliser les flèches haut / bas pour parcourir les commandes qui commencent par ces quelques lettres.

wim
la source