J'essaie de définir un alias pour Sudo !!
dans Bash. J'ai essayé alias sbb='Sudo !!
', mais il interprète cela comme un littéral !!
et impressions
Sudo: !!: command not found
Si j'utilise des guillemets doubles, il remplace le double coup dans la chaîne elle-même, donc cela ne fonctionne pas.
Y a-t-il un moyen de faire fonctionner cela? Ou un alias alternatif? "
!!
est développé par bash lorsque vous le saisissez. Il n'est pas développé par la substitution d'alias.
Vous pouvez utiliser le history
intégré pour faire l'expansion:
alias sbb='Sudo $(history -p !!)'
Si la commande est plus qu'une simple commande (par exemple, elle contient des redirections ou des tuyaux), vous devez appeler un Shell sous Sudo:
alias sbb='Sudo "$BASH" -c "$(history -p !!)"'
Essayer:
alias sbb='Sudo $(fc -ln -1)'
J'aime vraiment le nommer "s'il vous plaît":
alias please='Sudo $(fc -ln -1)'
Info: fc
est une commande intégrée dans le shell bash. qui répertorie, modifie et réexécute les commandes précédemment saisies dans un shell interactif.
Maintenant, il y a un référentiel à cet effet dans GitHub, il vérifie par magie s'il a besoin des droits de superutilisateur, corrige également les fautes de frappe:
Cela a été initialement publié à this question mais plus tard, a suggéré de poster ici.
Voici comment utiliser fc
et history
avec un alias pour !-
comme des substitutions. Supposons que si vous souhaitez utiliser !-n
(où n est le chiffre de ne dernière commande utilisée), vous pouvez utiliser fc
et history
avec un alias comme suit:
En utilisant history
:
alias xyz='echo $(history -p "!-<n>") ; Sudo $(history -p "!-n")'
Remarque: ici !-n
doit être joint à '
ou ''
.
En utilisant fc
:
alias xyz='echo $(fc -ln -n -n) ; Sudo $(fc -ln -n -n)'
Remarque: ici 1st et 2dakota du Nord -n
sont utilisés pour spécifier la plage de la liste d'historique.
Ici, j'ai utilisé l'écho avant d'exécuter la commande pour abattre comme !-<n>
.