Posso usar '!!' em aliases ou scripts?

10

No Terminal, posso usar !! , que fará referência ao meu comando anterior.
É possível usar isso em um alias? Eu tentei, mas o que acontece é que os dois pontos de exclamação são interpretados literalmente.

O que eu quero que seja possível é:

  1. eu entro em algum comando
  2. Eu digito um alias que incluirá o que foi inserido na etapa 1

Se houver uma solução usando scripts que também seja aceitável.

    
por Ludwig Magnusson 19.07.2016 / 13:48

3 respostas

11

O comando que lista o último comando executado é fc -nl -1 . Usando a substituição de saída, podemos adicionar mais parâmetros ao mesmo conteúdo

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

As citações, no entanto, podem ser um problema com essa abordagem

Um recurso muito interessante de fc é que, se você executar apenas o comando fc , ele abrirá o editor de texto especificado na variável FCEDIT (que você provavelmente deseja armazenar em ~/.bashrc ) e o conteúdo de a linha será seu último comando. Para sua facilidade, sugiro que você use nano como seu editor de texto, mas se você conhece vim - melhor ainda.

Por exemplo, e se eu precisar editar qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow Linha enorme, certo? Mas com fc , posso abrir vim e editar /org/ayatana/bamf/matcher , salvar, sair e ele será executado.

    
por Sergiy Kolodyazhnyy 19.07.2016 / 14:26
9

Você não pode usar !! , mas ...

No manual :

  

Um apelido útil para usar com o comando fc é r='fc -s' , então digitar 'r cc' executa o último comando que começa com cc e digitar 'r' executa novamente o último comando.

    
por Rinzwind 19.07.2016 / 14:03
8

Se você insistir em usar a sintaxe de expansão do histórico !! em vez de fc (já mencionada), existe uma maneira.

Por padrão, a expansão history está desativada para sessões de shell não interativas, por exemplo, em scripts.

Para ativar a expansão de histórico em scripts, ative as opções de shell relevantes primeiro:

set -o history 
set -o histexpand

set -o histexpand pode ser escrito como set -H também.

Agora, as operações de expansão do histórico, por exemplo !! funcionaria dentro do script.

    
por heemayl 19.07.2016 / 18:16