Eu posso usar '!!' em aliases ou scripts?

10

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

O que eu quero ter possível é:

  1. Eu insiro algum comando
  2. 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.

Ludwig Magnusson
fonte
qual é o seu objetivo principal? adicionar mais opções ao último comando?
Sergiy Kolodyazhnyy
Não, meu objetivo é digitar rapidamente um comando longo que costumo usar. No meio é uma longa cadeia que muitas vezes é o comando anterior
Ludwig Magnusson
parece que você deseja apenas o fccomando para abrir um editor de texto, porque essa é a maneira mais fácil de editar comandos longos. Deixe-me adicioná-lo à minha postagem. Além disso, talvez você possa fornecer um exemplo de comando?
Sergiy Kolodyazhnyy
Adicionada uma edição à minha postagem
Sergiy Kolodyazhnyy

Respostas:

11

O comando que lista o último comando executado é fc -nl -1. Usando 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
$> 

Citar, no entanto, pode ser um problema com essa abordagem

Uma característica muito interessante fcé que, se você executar o fccomando por si só, ele abrirá o editor de texto especificado na FCEDITvariável (na qual você provavelmente deseja armazenar ~/.bashrc) e o conteúdo da linha será o seu último comando. Para sua comodidade, sugiro que você use nanocomo seu editor de texto, mas se você souber vim - ainda melhor.

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

Sergiy Kolodyazhnyy
fonte
9

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

Do manual :

Um alias útil para usar com o comando fc é r='fc -s', para que digitar 'r cc' execute o último comando começando com cc e digitar 'r' reexecute o último comando.

Rinzwind
fonte
Portanto, isso permitirá que eu adicione algo ao início do meu último comando. Que tal no meio disso?
19416 Ludwig Magnusson
8

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

Por padrão, a historyexpansão é desativada para sessões de shell não interativas, por exemplo, em scripts.

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

set -o history 
set -o histexpand

set -o histexpandtambém pode ser escrito set -H.

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

heemail
fonte