Como repetir um comando com um parâmetro adicionado

6

Eu sei como repetir um comando e adicionar mais texto depois com !! da seguinte forma:

ls -l
!! tmp

A segunda linha expande para ls -l tmp .

Mas e se eu quisesse adicionar parâmetros ao comando entre as palavras? Por exemplo, se eu fiz o seguinte:

ls tmp

... então eu geralmente quero adicionar o parâmetro -l ao comando, mas não redigite tudo ou pressione para cima e use as teclas de seta para definir o cursor para o local correto. !! -l não funciona porque se torna ls tmp -l , o que não é válido. (Na prática, o comando é muito mais longo que o exemplo simples que usei aqui.)

Em outras palavras, estou procurando por algo como ?? -l , em que ?? é algo que repete o comando anterior, mas adiciona -l entre a primeira e a segunda palavras.

Só para esclarecer, ls -l tmp é apenas um exemplo simplificado. O caso de uso da vida real está mais próximo de algo como /very/long/path/to/very-long-command --with=a --very=long --parameter=list .

    
por Moyli 12.08.2015 / 13:53

4 respostas

2

!!:0 é a 0'ésima palavra do comando anterior e !!:* é todas as palavras, exceto a 0'th.

!!:0 -l !!:*

é o comando que você está procurando.

Fonte link

    
por 13.08.2015 / 12:55
3

Você pode:

$ ls -l
[..]
$ !:0* /tmp
[..]

Isso chamará ls -l /tmp . Veja a página de manual bash :

   Word Designators
       Word designators are used to select desired words from the event.  A : separates the 
       event specification from the  word  designator.   It  may  be  omitted  if the word
       designator begins with a ^, $, *, -, or %.  Words are numbered from the beginning of
       the line, with the first word being denoted by 0 (zero).  Words are inserted into the
       current line separated by single spaces.

       0 (zero)
              The zeroth word.  For the shell, this is the command word.
       n      The nth word.
       ^      The first argument.  That is, word 1.
       $      The last argument.
       %      The word matched by the most recent '?string?' search.
       x-y    A range of words; '-y' abbreviates '0-y'.
       *      All of the words but the zeroth.  This is a synonym for '1-$'.  It is not an 
              error to use * if there is just one  word  in
              the event; the empty string is returned in that case.
       x*     Abbreviates x-$.
       x-     Abbreviates x-$ like x*, but omits the last word.

       If a word designator is supplied without an event specification, the previous command
       is used as the event.
    
por 12.08.2015 / 14:15
1

O Bash permite que você pesquise rapidamente e receba de volta no seu prompt um comando do seu histórico para que você possa editá-lo manualmente antes de executá-lo.

No prompt:

  1. Pressione Ctrl-R (como em R everse): o prompt deve ser alterado para informar que você está no modo Invertido,
  2. Comece a digitar qualquer parte do comando (no seu exemplo, você pode digitar ls , tmp ou mesmo mp para corresponder a ls tmp ): o último comando usado que corresponde aos traços de sua chave será mostrado como você digita.
  3. Depois de encontrar o seu comando, basta digitar tab para obtê-lo em seu prompt normal: ele não será executado ainda, ele estará aguardando suas modificações, por exemplo, qualquer adição, remoção ou alteração de parâmetro, ou aplicar um comando diferente ao mesmo arquivo, etc.
por 12.08.2015 / 14:16
0

Para iniciar o comando anterior com uma opção adicionada imediatamente após o nome do comando, pressione as seguintes teclas:
Acima Início Ctrl + Direito Espaço (digite a opção) Enter

Se as teclas do cursor não funcionarem no seu sistema, você pode usar as teclas de movimento do Emacs: + P Ctrl + A Meta + F Espaço (digite a opção) Digite

Se o nome do comando tiver várias palavras (por exemplo, porque é um caminho com barras), Ctrl + Direita somente passa da primeira barra. Pesquise o primeiro espaço.

Acima Início Ctrl + S Espaço Esc Espaço (digite a opção) Digite
Ctrl + P Ctrl A Ctrl + S Espaço Esc Espa (digite a opção) Digite

Com esta pesquisa, você pode começar com Up Acima ao invés de Acima Início , ou Ctrl + P Ctrl + P em vez de Ctrl + P Ctrl + A . O número de pressionamentos de tecla é o mesmo, mas é um pouco mais fácil de digitar, mas menos intuitivo.

Se preferir, você pode usar o mecanismo de substituição de histórico , que envolve menos pressionamentos de teclas, se o comando contiver barras.
^ ^ --option 
Observe o espaço à direita após a opção: você está substituindo o primeiro espaço no comando por um espaço, a nova opção e outro espaço.

    
por 13.08.2015 / 12:15