Je peux voir la dernière commande du terminal en appuyant sur up arrow
comme dans l'exemple suivant:
J'ai tapé cd /
:
Makss-Mac:~ maks$ cd /
... appuyé enter
, commande cd /
exécutée et maintenant je peux appuyer up arrow
et voir à cd /
nouveau commande :
Makss-Mac:/ maks$ cd /
Je veux non seulement voir la dernière commande, mais la copier dans le presse-papier.
Peut-être existe-t-il un raccourci qui montre non seulement la dernière commande dans le terminal (comme le up arrow
fait), mais en même temps, la copie dans le presse-papier.
Ou peut-être existe-t-il un raccourci pour sélectionner tous les éléments de la ligne de terminal actuelle. Et ainsi je pourrai copier la dernière commande (après avoir appuyé up arrow
) en appuyant sur super+c
. Bien sûr, je peux le sélectionner avec la souris. Mais lorsque les commandes sont 10 fois plus longues que cd /
cela peut prendre beaucoup de temps, surtout si vous le faites toutes les 30 secondes.
Ou peut-être qu'il y a moyen d'écrire un plugin pour Terminal
la source
Réponses:
Mettez ceci dans votre
~/.bashrc
~/.bash_profile
ou partout où vous l'aimez:Après avoir ouvert une nouvelle fenêtre (ou en cours d’exécution
source ~/.bash_profile
), vous devriez pouvoir exécutercopyLastCmd
et avoir la commande dans le presse-papiers.Pour expliquer ce qui se passe: vous utilisez essentiellement "fix command" (
fc
) pour obtenir la dernière commande, supprimez les espaces de début et de fin pour obtenir un formatage plus agréable avecawk
, puis copiez-les dans le presse-papiers de votre Macpbcopy
.MODIFIER:
Maintenant que nous savons que vous souhaitez copier pour coller dans un autre onglet de terminal, il existe une autre option: Ajoutez ces lignes à votre
~/.bashrc
~/.bash_profile
ou à l'endroit où vous l'aimez:Ensuite, une fois que vous avez ouvert de nouveaux onglets (appelons-les "onglet A" et "onglet B"):
EDIT 2: J'ai remplacé l'usage de
sed
withawk
dans la réponse originale ci-dessus, afin de prendre soin des espaces de début et de fin.la source
awk
:alias copyLastCmd='fc -ln -1 | sed '1s/^[[:space:]]*//' | awk 1 ORS="" | pbcopy '
fc -ln -1 | awk '{$1=$1}1'
supprimera les espaces blancs de fin et de début.alias copyLastCmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy"
. obtient toujours mon upvoteVous pouvez définir votre historique pour ignorer les commandes commençant par un espace:
Et puis exécutez la commande suivante pour git la dernière commande dans le presse-papiers (assurez-vous que vous avez un espace au début):
Vous voudrez probablement alors enregistrer la commande sous un alias pour le rendre plus facile à mémoriser.
la source
Voici une autre prise basée sur la réponse de @Asmus. Pour que son alias fonctionne dans mon script bash, je devais utiliser un peu de citation, car les guillemets simples ne fonctionnent pas dans un alias à une seule citation sans quelques citations supplémentaires:
Le
'\''
va essentiellement fermer la citation actuelle, puis ajouter une citation échappée, puis rouvrez la citation réelle.La version ci-dessus copiera la dernière commande dans votre presse-papiers et, une fois celle-ci collée, elle sera immédiatement exécutée, car elle comportera une nouvelle ligne à la fin.
Pour vous débarrasser de la nouvelle ligne à la fin et pouvoir ainsi modifier la commande avant de l'exécuter, procédez comme suit:
Le
ORS=''
(sans les guillemets) enlèvera le caractère de fin de ligne suivant, vous pourrez donc éditer le texte collé avant de l'exécuter.la source
Cela utilisera l’extension de l’historique pour récupérer la dernière commande et l’envoyer en écho. Vous pouvez diriger vers
pbcopy
pour enregistrer la dernière commande dans votre presse-papiers.Si vous voulez une commande de votre historique qui ne soit pas la dernière , vous pouvez exécuter:
Et référencer le numéro de commande désiré comme:
la source
Je suis venu ici avec la réponse exacte de Sam Berry, mais cela ne fonctionne pas pour moi (OSX 10.14.6).
J'ai réussi à le faire avec des guillemets autour de
!!
:echo "!!" | pbcopy
la source