Parfois, lorsque j'exécute une commande, je ne remarque pas que je devais l'exécuter en tant que super utilisateur pour disposer de suffisamment d'autorisations.
Est-il possible d'exécuter à nouveau la même commande mais en tant que super utilisateur?
Le moyen le plus simple consiste à exécuter:
Sudo !!
Cela exécutera la dernière commande mais en tant que super utilisateur.
Source .
Vous pouvez utiliser la flèche vers le haut pour faire défiler vos anciennes commandes, les réécrire/les modifier et ajouter le Sudo
devant elles. (le bouton d'accueil au-dessus des touches fléchées réglera la position au début.)
Je n'aime pas l'idée de Sudo !!
, car parfois vous ajoutez une autre commande entre les deux et vous ne vous en souvenez plus.
Je vais juste ajouter une alternative: en tant que court en tapant 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 (je compte "ctrl + A" comme un ...), mais en ajoutant "flèche vers le haut", vous pouvez le faire selon la commande de votre historique.
Cette question aurait pu être généralisée en " Exécuter la même commande mais avec quelques modifications ", car l'une des brillantes décisions de conception sous Unix est de ne pas implémenter dans le shell, peut être exploitée par toute commande appelée à partir du shell.
En d'autres termes, cette astuce ne s'applique pas seulement à Sudo
:
Sudo !!
)time !!
)env A=b B=z !!
)!!
)L’extension d’historique (également appelée substitution d’historique) n’est qu’une fonction du shell facilitant la répétition des commandes précédentes (avec moins de frappes au clavier). Consultez 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.
Il y a quelques façons de le faire
Il suffit de saisir à nouveau la commande en ajoutant Sudo
avant la commande
Presse Up arrow pour obtenir la dernière commande et mettre Sudo
devant celle-ci.
Entrez Sudo !!
Le !!
se développe à la dernière commande entrée. Vous pouvez faire la même chose avec d’autres choses avec l’historique en ligne de commande, voir ici
J'utilise zsh au lieu de bash et j'ai ceci dans mon ~/.zshrc
, donc en pressant Alt+S insère 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.
Si vous voulez le faire dans un alias, vous devez utiliser alias redo='Sudo $(history -p !!)'
pour une raison quelconque.
su -c "!!"
Si vous n'avez pas la permission d'être root avec Sudo ou le programme Sudo ne s'est pas installé sur le système.
La façon dont je le préfère:
Mais il serait peut-être plus facile de faire "Sudo !!", à vous de choisir.