Terminal Linux (par exemple Ubuntu), existe-t-il une méthode pour obtenir la dernière ligne? Supposons que je tape au hasard une td
commande, qui n'a pas été installée sur mon système, je vais donc recevoir un message comme ci-dessous. J'aimerais avoir un "raccourci" pour courir sudo apt-get install textdraw
rapidement.
Existe-t-il un tel outil ou comment puis-je copier la dernière ligne dans le presse-papiers sans utiliser la souris?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
nontd
. flèche vers le haut ne me donnera quetd
Réponses:
Si cela ne vous dérange pas un peu d'obscénité (je ne le fais pas), vous voudrez peut-être utiliser le fuck , un outil qui fait exactement ce que vous avez demandé.
Eh bien, pas exactement, mais cela résout le même problème. Au lieu d'obtenir simplement la dernière ligne, il essaie de faire correspondre la dernière commande que vous avez tapée.
Les exemples présentés dans le référentiel présentent plusieurs des scénarios que vous avez mentionnés.
la source
La réponse courte: non, vous n'avez probablement aucune méthode disponible pour ce faire.
La réponse longue:
vi
(où la sortie n'est pas du bon texte orienté ligne). bash ne fait pas ça, de toute façon.En pratique, ce que les gens font pour contourner cette limitation, c'est utiliser d'autres programmes pour capturer la sortie de commande et la modifier. Mais cela ne résoudra pas votre problème immédiat.
Par exemple, j'utilise vi-like-emacs pour émettre des commandes shell ad hoc. Si ceux-ci ne nécessitent pas de saisie supplémentaire, cela fonctionne bien pour les exécuter dans une fenêtre , capturant la sortie de la commande - et éditant la sortie selon les besoins pour affiner la commande. Emacs vous permet également de faire quelque chose comme ça, ainsi que vim.
la source
Si vous avez reçu ce message dans ubuntu après avoir exécuté une commande non existante à partir de bash, votre système utilise probablement la
command_not_found_handle
fonction. Vous pouvez le voir dans/etc/bash.bashrc
.Un piratage trivial peut être une option: je viens de créer un script nommé
cnfh
:Exécutez ensuite la commande td à l'aide de ce script:
Utilisation d' Ubuntu 14.04.2 LTS . J'espère que ça aide.
la source
Dans tmux v2.4 et ultérieur (depuis cette validation, https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) avec
send-keys -X
. Cela pourrait être possible dans les anciennes versions, avec une syntaxe différente.Dans
.tmux.conf
:Maintenant,
prefix+!
copiera la dernière ligne à la position actuelle du curseur.cursor-left
peut être omis si vous souhaitez l'exécuter directement sans taper return.Remarque : cela ne fonctionnera pas si la dernière ligne est vide ou si elle est encapsulée mais elle est toujours utile dans la plupart des cas
la source
Pour exécuter la dernière ligne de sortie de la commande la plus récente, si vous êtes prêt à réexécuter cette commande (car elle n'a rien fait sauf émettre un message de diagnostic), faites
Étape par étape (couche par couche):
fc
(qui pourrait signifier «Fix Command») est une commande intégrée au shell pour accéder à l'historique des commandes.-ln
l
(minuscule L) - L ist commande précédente (s)n
- ne pas inclure la commande n umbers1
(un) - fait référence à la commande la plus récentefc -ln -1
répertorie la commande la plus récente, sans inclure de numéro de commande.$(fc -ln -1)
exécute la commande la plus récente.$(fc -ln -1) | tail -n 1
exécute la commande la plus récente et affiche la dernière ligne de sa sortie. C'est lasudo apt-get install textdraw
ligne, dans votre exemple.$($(fc -ln -1) | tail -n 1)
exécute cette commande.Vous pouvez alias ceci:
Je vous laisse choisir un nom plus court pour l'alias.
Remarques:
|
,<
,>
,;
,&
, ou même des citations. Si vous devez gérer des commandes complexes, vous pouvez probablement le faire en ajoutant uneval
, mais ce n'est généralement pas recommandé.tail -n 17 | head -n 1
.fc
. Notez quefc -ln -1
c'est court pourfc -ln -1 -1
. Pour récupérer la troisième commande la plus récente, utilisezfc -ln -3 -3
.la source