Como este bash alias repete o último comando como sudo work? [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    
  •              Como posso 'alias sudo !!'?                                      5 respostas                          
  •     

Recentemente, deparei com esse apelido engenhoso para repetir o último comando emitido, mas como sudo. Isso pode ser feito usando sudo !! diretamente no terminal após o comando com falha.

O alias que encontrei é alias mycmd='sudo $(history -p \!\!)'

Não está claro para mim como isso funciona.

    
por apoc 12.01.2015 / 09:53

1 resposta

3

$(history -p \!\!) é uma maneira de executar o último comando sem adicioná-lo novamente ao histórico. De help history :

  -p    perform history expansion on each ARG and display the result
    without storing it in the history list

No bash, !! se expande para o último comando executado, mas você não pode usá-lo diretamente em aliases, já que essa expansão é executada bem antes da expansão do alias. (A expansão da história é uma das primeiras a acontecer - acontece antes mesmo da expansão da chave (que é geralmente primeiro ).

Então, você tem que usar alguma maneira de executar o último comando, e isso pode ser feito usando history -p , que expande !! da maneira que o shell faria.

Embora eu não saiba por que eles escaparam de ! . Para mim, funciona bem sem as barras invertidas.

    
por 12.01.2015 / 10:21