Como posso 'alias sudo !!'?

43

Estou tentando definir um alias para sudo !! no Bash. Eu tentei alias sbb='sudo !! ', mas interpreta isso como um literal !! e imprime

sudo: !!: command not found

Se eu usar aspas duplas, ele substitui o double bang na própria string, então isso não funciona.

Existe alguma maneira de fazer isso funcionar? Ou um alias alternativo? '

    
por Manishearth 02.08.2013 / 20:17

5 respostas

54

!! é expandido pelo bash quando você o digita. Não é expandido por substituição de alias.

Você pode usar o history integrado para fazer a expansão:

alias sbb='sudo $(history -p !!)'

Se o comando for mais do que um comando simples (por exemplo, ele contém redirecionamentos ou pipes), você precisa invocar um shell sob sudo:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'
    
por 02.08.2013 / 20:24
31

Tente:

alias sbb='sudo $(fc -ln -1)'

Eu realmente prefiro nomear 'por favor':

alias please='sudo $(fc -ln -1)'

Informações: fc é um comando incorporado ao bash Concha. que lista, edita e reexecuta comandos previamente inseridos em um shell interativo.

    
por 30.09.2014 / 19:27
3

Agora há um repositório para esse propósito no GitHub, ele verifica magicamente se precisa de direitos de superusuário, e também corrige os erros de digitação:

link

    
por 11.09.2015 / 11:31
0

Isso foi postado originalmente em esta pergunta, mas depois, sugerido para postar aqui.

Veja como você pode usar fc e history com alias para !- como substituições. Suponha que se você quiser usar !-n (onde n é dígito para n th último comando usado), então você pode usar fc e history com alias como segue:

  1. Usando history :

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'
    

    Observação: aqui, !-n deve estar entre ' ou '' .

  2. Usando fc :

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'
    

    Nota: aqui 1 st e 2 nd -n são usados para especificar o intervalo da lista de histórico.

Aqui eu usei o eco antes de executar o comando para derrubar como !-<n> .

    
por 05.01.2016 / 09:53
-1
alias please="sudo $(history -p \!\-2)"
    
por 31.03.2016 / 01:24