Bash, insira o último argumento usado do comando atual

4

Estou ciente de que você pode lembrar o último argumento do comando anterior com !$ e também percorrer os argumentos anteriores com ALT + . , mas você pode se lembrar do último argumento usado para o comando atual que está sendo usado? / p>

por exemplo,

root@chip:/# echo peckahs
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# echo peckahs < used key shortcut to recall 'peckahs' the last used argument for echo
    
por regularjoe 06.02.2015 / 17:38

3 respostas

3

Com o bash você pode fazer quase o que está pedindo assim:

echo !echo:$

Então quando você faz

echo This is fun
ls
echo !echo:$

a última linha gera fun . * em vez de $ produz todos os argumentos para o comando correspondente; então

echo This is fun
ls
echo !echo:*

gera novamente This is fun ; mas você também pode fazer

!echo

neste caso.

Isso não se limita a repetir os argumentos de um comando com o mesmo comando:

printf !echo:*

Consulte o manual de referência da bash para obter detalhes. Você pode até combinar isso com a opção histverify shell para dar a você a chance de verificar o comando antes de ser executado, o que o aproxima do preenchimento baseado em histórico interativo do teclado.

Expansões da história podem ser usadas em qualquer lugar; por exemplo, por exemplo

lastechoargs="!echo:*"

armazenou todos os argumentos no último comando echo na variável lastechoargs .

Isso também funciona para comandos completos; digamos, por exemplo, que você elaborou um comando git complexo e deseja salvá-lo em um arquivo:

echo !git > mygitcommand

Ou você deseja arquivar alguns diretórios, mas decide excluir alguns arquivos primeiro:

ls dir1 dir2
rm dir2/somefile
tar cpzf archive.tar.gz !ls:*
    
por 06.02.2015 / 20:08
0

Sim. Em qualquer shell POSIX você pode fazer ...

set -o vi
^[[num]-#^[[num]_

... onde ^[ representa a chave ESC e [num] representa um parâmetro opcional para o comando n th history contando para trás do atual e n th argumento no comando anterior contando de trás para frente os últimos respectivamente. Dependendo da configuração do teclado, você poderá usar CTRL e a tecla combinada.

A sequência chama o comando numerado, adiciona um comentário # a ele e o armazena no histórico do shell como o comando mais anterior. Em seguida, o atalho ^[_ chama o último argumento no último comando.

bash também salva o último argumento por padrão no parâmetro $_ do shell, então, depois de fazer a primeira parte, você pode simplesmente expandir o último argumento dessa forma também.

    
por 07.02.2015 / 04:29
0

Se o seu bash no modo emacs você pode usar Ctrl + w (apagar a última palavra) então Ctrl + u (string excluída de entrada)

    
por 06.02.2015 / 18:40