!!: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
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
.
!!: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
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.
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:
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. 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. 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:
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) DigiteCom 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.
Tags bash command-history