Ma réponse propose une commande simple dans trois syntaxes différentes, qui fonctionnent toutes également, mais l'une est un peu plus courte et plus facile à taper que la seconde. La troisième variante est un soi-disant alias, ce qui signifie que vous pouvez attribuer à la commande un nom personnalisé et l'appeler en l'exécutant sans avoir à vous souvenir des éléments complexes.
Préparation:
Tout d'abord, installez le package xsel
qui vous permet d'accéder au presse-papiers X depuis le terminal:
sudo apt-get install xsel
Variation de commande 1 (courte):
Après cela, vous pouvez taper la ligne suivante pour copier la commande précédente dans le presse-papiers:
xsel -ib <<<!!:q
Si vous souhaitez copier la deuxième commande la plus récente, remplacez-la !!
par !-2
, pour la troisième utilisation la plus récente !-3
, etc.
Pour expliquer ce que vous exécutez, voici une brève ventilation de la commande:
xsel
est un outil en ligne de commande pour accéder aux presse-papiers X.
Pour plus d'informations, lisez sa page de manuel en ligne ou en exécutant man xsel
.
- Le
-i
paramètre indique xsel
de lire à partir du stdin (généralement cela signifie une entrée au clavier, mais nous allons rediriger quelque chose ici)
- Le
-b
paramètre spécifie d'utiliser le presse-papiers au lieu des sélections "primaires" ou "secondaires" de X.
<<<
est une syntaxe Bash spéciale appelée "Here String".
Il développe (et n'évalue pas!) L'argument (un seul!) Après lui et le redirige en tant que chaîne vers le stdin (entrée standard) de la commande avant / après laquelle il se trouve.
!!:q
est appelé une "commande de coup" pour l'expansion de l'historique dans bash. Il se remplace par n'importe quelle ligne de commande précédemment tapée.
Pour plus d'informations, lisez sa page de manuel locale en exécutant man history
(la page de manuel en ligne n'est pas utile).
- Le
!!
représente la ligne de commande précédente et est un synonyme de !-1
.
Signifie évidemment !-2
alors l'avant-dernière ligne de commande. N'oubliez pas le signe moins -
, sinon il renverra la 2ème commande (3ème / ...) que vous avez déjà tapée.
- Le
:q
modifie la commande bang et dit à bash de placer la substitution entre guillemets simples ( '
) pour empêcher une nouvelle expansion par le shell.
Variation de commande 2 (légèrement plus longue):
echo !!:q | xsel -ib
echo
a pour tâche simple d'imprimer tous ses arguments sur la sortie standard du terminal.
!!:q
est appelé une "commande de coup" pour l'expansion de l'historique dans bash. Il se remplace par n'importe quelle ligne de commande précédemment tapée.
- Le
!!
représente la ligne de commande précédente et est un synonyme de !-1
. Signifie évidemment !-2
alors l'avant-dernière ligne de commande. N'oubliez pas le signe moins -
, sinon il renverra la 2ème commande (3ème / ...) que vous avez déjà tapée.
- Le
:q
modifie la commande bang et dit à bash de placer la substitution entre guillemets simples ( '
) pour empêcher une nouvelle expansion par le shell.
|
est une pipe. Il redirige la sortie du terminal ("stdout") de la commande avant celle-ci vers l'entrée du terminal ("stdin") de la commande qui la suit.
xsel
est un outil en ligne de commande pour accéder aux presse-papiers X.
Pour plus d'informations, lisez sa page de manuel en ligne ou en exécutant man xsel
.
- Le
-i
paramètre indique xsel
de lire à partir du stdin (généralement cela signifie une entrée au clavier, mais nous allons rediriger quelque chose ici)
- Le
-b
paramètre spécifie d'utiliser le presse-papiers au lieu des sélections "primaires" ou "secondaires" de X.
Variation de commande 3 (alias):
Un alias bash est une bonne chose si vous ne voulez pas vous souvenir des commandes longues ou compliquées que vous utilisez souvent. Vous pouvez attribuer cette commande à un nom d'alias simple, que vous pouvez exécuter à la place de la commande longue pour obtenir le même résultat.
Malheureusement, comme les commandes de coup sont une fonctionnalité spéciale de Bash et sont développées avant que les alias ne soient résolus, vous ne pouvez pas simplement alias l'une des variantes ci-dessus car la !!
pièce ne fonctionnera pas. Il existe cependant une solution de contournement.
Pour définir l'alias, exécutez la ligne suivante dans votre terminal. Notez que vous pouvez choisir n'importe quel nom de variable Bash valide au lieu de copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Ceci n'est cependant que persistant pour votre session Bash actuelle, ce qui signifie que l'alias disparaîtra après la fermeture de la fenêtre du terminal. Vous pouvez le rendre persistant dans chacune de vos sessions Bash en ajoutant cette ligne ci-dessus à la fin de votre ~/.bashrc
fichier, ou à votre ~/.bash_aliases
fichier si vous en avez un.
Encore une fois, une brève rupture de la ligne:
alias name='command'
est la syntaxe pour définir un alias dans Bash. Le command
sera exécuté chaque fois que vous exécutez à name
partir de maintenant.
history -p \!\!
renvoie la ligne de commande précédemment exécutée vers stdout (sortie standard). Sans le -p
commutateur, il imprimerait non seulement mais réexécuterait également la commande.
Notez que nous devons échapper les bangs ( !
) avec des barres obliques inverses ( \
), car sinon bash les développerait lorsque nous essayons de définir l'alias, ce qui n'a aucun sens car ils doivent être dans l'alias tels qu'ils sont.
Encore une fois, vous pouvez également spécifier la commande [n] -th récente en remplaçant le deuxième bang par -n
, par exemple \!-2
.
|
est une pipe. Il redirige la sortie standard ("stdout") de la commande qui la précède vers la norme terminale ("stdin") de la commande qui la suit.
xsel
est un outil en ligne de commande pour accéder aux presse-papiers X.
Pour plus d'informations, lisez sa page de manuel en ligne ou en exécutant man xsel
.
- Le
-i
paramètre indique xsel
de lire à partir du stdin (généralement cela signifie une entrée au clavier, mais nous allons rediriger quelque chose ici)
- Le
-b
paramètre spécifie d'utiliser le presse-papiers au lieu des sélections "primaires" ou "secondaires" de X.
<<<"!!" xsel -ib