Comment copier une commande entrée précédemment à l'aide de l'utilitaire d'historique sans la relancer?


14

Je peux utiliser la historycommande sur CentOS pour obtenir la liste des commandes entrées précédemment, cependant, si je fais quelque chose comme:, l' !372historique tentera d'exécuter la commande référencée.

J'ai besoin que la commande d'exécution précédente apparaisse au niveau du curseur actuel. Voici un exemple:

[dev@home ~]$ previous_command_no_execute!372  

Réponses:


25

Que diriez-vous, mettez ceci sur votre ligne de commande:

$ !372

Appuyez ensuite sur ESCsuivi de CTRL+E. Cela se développera automatiquement sur la ligne de commande sans réellement l'exécuter. (étend également tout le reste sur la ligne, y compris les vars env)

Pour autant que je sache, cela ne fonctionne que sur Bash.


Oui, c'est la solution exacte.
centosnoob

1
Pour une solution en zsh, appuyez sur tab après avoir tapé !372et il la développera pour vous.
Reid

10

Vous pouvez utiliser Ctrlrpuis taper certains caractères de la commande d'origine, par exemple

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

ci-dessus, j'ai tapé Ctrl-r /etcet il a tiré la sudo /etc/init.d/apache2 restartcommande de l'histoire


6

history | grep 372 devrait fonctionner, non?

Éditer:

De plus, vous pouvez faire quelque chose comme echo !372 > /dev/clipmettre le répertoire de commandes dans votre presse-papiers.


toujours travaillé pour moi ...
voretaq7

non qui trouve simplement cette commande spécifique exécutée précédemment.
centosnoob

Alors, moi-même et @ voretaq7 avons mal compris votre question. Pourriez-vous être un peu plus clair?
MDMarra

@MDMarra J'ai mis à jour la question. J'espère que cela jette un peu plus de lumière.
centosnoob

@centosnoob en regardant votre mise à jour et en supposant que votre console prend en charge une souris et un copier-coller (et il est rare d'être directement sur la console de style terminal sans capacité de copier-coller de nos jours), la solution de copier-coller est vraiment la moins douloureuse . L'édition de commandes de style vi comme je l'ai souligné dans ma réponse est une autre option, mais je suis un fanatique de vi et même je n'utilise pas l'édition de ligne de commande de style vi ...
voretaq7

4

MDMarra a donné le moyen facile ( history|grepet copier / coller en utilisant votre environnement de bureau, en supposant que vous en ayez un). Je fournirai ce que j'appelle à la dure, qui fonctionne si vous n'avez pas d'environnement de bureau ou de souris.

En supposant que vous exécutez bash comme shell:

$ set -o vi
$ ESC372k

(vous aurez maintenant la commande que vous avez exécutée il y a 372 commandes sur la ligne et vous serez en vimode de commande -style. Modifiez comme si vous utilisiez ex/ vi)


Intéressant. Cela ne semble fonctionner que si vous avez exécuté "set -o vi" très tôt. Pourrait devoir mettre cela dans le profil bash ou quelque chose.
Matt

C'est une de ces choses "j'utilise toujours vi, pourquoi n'utilise-je pas les liaisons vi pour éditer des lignes en bash" que vous réalisez avec un choc. Il faut un peu de temps pour s'y habituer, puis les fixations de style emacs que tout le monde utilise semblent étranges et inutiles.
cjc

@Matt Oui - vous devez définir votre mode d' viédition sur l'édition de style. Cela devrait fonctionner dès que vous set -o vi, et devrait fonctionner pour tout votre historique (le mode d'édition est juste une interface avec l'historique des commandes du shell et d'autres choses).
voretaq7

@cjc J'utilise vi comme éditeur de mon choix, mais je n'utilise pas de liaisons de style vi pour modifier ma ligne de commande (il m'est juste arrivé de savoir comment faire cela en mode vi du haut de ma tête, mais d'autres ont posté l'équivalent en mode emacs qui peut être plus convivial :).
voretaq7

4

La façon la plus simple et la plus rapide de faire ce que vous voulez est d'exécuter:

!372:p

suivi par Enteret


0

Êtes-vous sur un système de bureau ou un serveur?

Sur mon système de bureau Kubuntu avec le shell ouvert, il prend en charge la mise en évidence avec la souris. En général, je sélectionne simplement le texte avec la souris et je clique sur le bouton central de la souris pour le coller. Est-ce que cela fonctionnerait pour vous?

Vous pouvez donc grep pour la commande. Mettez en surbrillance le texte. Collez-le avec le bouton central de la souris, puis modifiez-le.

Il pourrait y avoir une meilleure façon, mais cela fonctionne pour moi.


0

il n'y a pas de commande pour faire un collage automatique, mais vous pouvez rappeler n'importe quelle commande dans un éditeur pour la modifier avant de l'exécuter. cela peut atteindre ce que vous recherchez, mais en quittant la commande s'exécutera donc si vous voulez abandonner, vous devez vider votre tampon d'édition avant de quitter votre éditeur.

fc -e vi 372 372

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.