Réponses:
Le moyen le plus simple consiste à exécuter:
sudo !!
Cela exécutera la dernière commande mais en tant que super utilisateur.
Source .
!!
seule exécute la commande précédente telle que sauvegardée dans history
. De plus, faire !-1
, !-2
etc. exécute votre dernière commande, votre dernière dernière commande, etc. Pratique!
!<command>
exécutera le dernier événement de ~/.bash_history
ce début avec<command>
!
truc copié à partir de tcsh
m'a bousillé plus de fois qu'il n'a jamais été utile. Les guillemets doubles ne protègent pas de l'interprétation de !
. $ foo "!bar"
-> !bar: event not found
.
Un séjour sans faille
réponse : vous entrez sudo !!
immédiatement après pour répéter la commande précédente avec des privilèges accrus.
edit: Image trouvée via reddit , et c’est une parodie de la bande dessinée xkcd originale de Randall Munroe.
Vous pouvez essayer la flèche vers le haut pour faire défiler vos anciennes commandes, les réécrire / les modifier et les ajouter sudo
devant. (le bouton d'accueil au-dessus des touches fléchées réglera la position au début.)
Je n'aime pas l' sudo !!
idée, car parfois vous ajoutez une autre commande entre les deux et vous ne vous en souvenez plus.
sudo !!
, le shell se développera !!
afin que vous puissiez voir la commande à exécuter. Il peut donc être irritant d'appuyer sur Ctrl-C et trouver la bonne commande, mais au moins, cela ne vous prendra pas au dépourvu.
!!
sudo !!<TAB>
et il se complète automatiquement !!
. Bash peut élargir l’histoire avec M-^
(pour moi, alt + shift + 6), mais c’est moins fluide (vous pouvez néanmoins le réassocier). Il y a aussi shopt -s histverify
, ce qui fait que lorsque vous utilisez le développement de l'historique et appuyez sur Entrée, il vous donne une autre ligne d'invite avec le développement effectué pour vous permettre de le voir / le modifier.
shopt -s histverify
ne va pas aider un bit. La plupart des gens s'habitueront à frapper Enter
deux fois. À ce stade, il est encore trop tard pour vérifier ce qui s'est passé.
Je vais juste ajouter une alternative: aussi courte que taper sudo !!
et plus flexible:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
C'est exactement le même nombre de frappes au clavier (je compte "ctrl + A" comme un ...), mais en ajoutant "flèche haut", vous pouvez le faire selon la commande de votre historique.
set -o vi
). Ensuite, vous pouvez échapper (passer en mode commande), puis 'I' (majuscule 'i', insérer en début de ligne).
Il y a quelques façons de le faire
Il suffit de saisir à nouveau la commande en ajoutant sudo
avant la commande
Appuyez sur Up arrowpour obtenir la dernière commande et la mettre sudo
devant.
Entrer sudo !!
L' !!
agrandit jusqu'à la dernière commande entrée. Vous pouvez faire la même chose avec d'autres choses avec l'historique de la ligne de commande, voir ici
Cette question aurait pu être généralisée en " Exécuter la même commande mais avec quelques modifications ", car l'une des décisions brillantes de la conception sous Unix est que ce qui est implémenté une fois dans le shell peut être exploité par n'importe quelle commande appelée à partir du shell.
En d'autres termes, cette astuce ne s'applique pas uniquement à sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)L’extension d’historique (également appelée substitution d’historique) n’est qu’une fonctionnalité du shell facilitant la répétition des commandes précédentes (avec moins de frappes au clavier). Vérifiez votre page de manuel shell pour history expansion
. Il décrit beaucoup d'autres astuces et raccourcis que vous pouvez utiliser avec l'historique, par exemple:
Vous pouvez vous référer aux commandes précédentes par leur numéro:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Vous pouvez faire référence à des mots individuels dans les commandes précédentes:
some-command !$ # run some-command on the last arg of previous command
Vous pouvez également rechercher avant de répéter:
!?awk # repeat the last command including the string 'awk'
Vous pouvez rechercher l'historique et remplacer quelque chose par quelque chose d'autre:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Et bien plus encore, puisque vous pouvez combiner la sélection de commandes, la sélection d'arguments, la recherche et le remplacement de manière indépendante.
La page de manuel de votre shell (dans ce cas man bash
) est votre ami.
J'utilise zsh au lieu de bash et j'ai ceci dans mon ~/.zshrc
, pressant Alt+ Sinsère donc sudo
au début de la ligne de commande:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Malheureusement, je ne pouvais pas trouver un moyen de faire la même chose en bash.
~/.inputrc
"\es":"\C-asudo "
et vous irez au début d’une longue ligne et sudo sera inséré au début de la ligne en appuyant sur alt-s
. Redémarrez le terminal ou relisez-le ~/.inputrc
pour que cela fonctionne.
Si vous voulez le faire dans un alias, vous devez l'utiliser alias redo='sudo $(history -p !!)'
pour une raison quelconque.
La façon dont je le préfère:
Mais il serait peut-être plus facile de faire "sudo !!", à vous de choisir.