Bash: parâmetro de acesso passado ao último comando [duplicado]

1

Esta é uma situação em que frequentemente me encontro:

mkdir /Some/really/long/path/to/a/directory/
cd /Some/really/long/path/to/a/directory/

Sei que idealmente você usaria cd /Some/...etc.../a/ e, em seguida, mkdir directory , mas eu executei mkdir primeiro e depois tive cd no final do mesmo caminho de arquivo que acabei de criar.

Sem fazer ...

var="/Some/...etc.../a/"
mkdir $var/directory; cd $var

... o que é ainda pior, existe alguma maneira de reutilizar o parâmetro passado para o comando anterior ? Estou ciente do curso da conclusão da tabulação, mas em uma série de diretórios aninhados com nomes semelhantes isso nem sempre ajuda muito. Idealmente, estou esperando por um atalho como $# ou $@ .

Se isso não for feito, a próxima melhor solução para economia de tempo será igualmente apreciada!

    
por py4on 19.04.2015 / 22:47

3 respostas

2

No bash (e alguns outros shells, como zsh), você pode usar $_ , que contém o último argumento para o comando anterior:

mkdir /path/to/file
cd "$_"
    
por 19.04.2015 / 22:48
2

Ao trabalhar interativamente, você pode usar a expansão do histórico para isso:

mkdir /Some/really/long/path/to/a/directory/
cd !$

Existem imensas variantes para isso que permitem acessar outros parâmetros do comando anterior ou de qualquer outro comando em seu histórico. Veja Bash, insira o último argumento usado do comando atual para detalhes ...

    
por 19.04.2015 / 23:04
2

Existem respostas anteriores que sugerem que você use $_ e !$ . Enquanto isso funciona, acho bastante perigoso, pois eles não são expandidos e você não pode ver o valor deles antes de pressionar enter e executar o comando. Imagine usar rm $_ sem ter certeza do que você vai excluir!

Se você estiver usando o bash (provavelmente com o modo emacs do readlines, que é o padrão), sugiro que você pressione ESC , libere-o e pressione . .

Este atalho lembra o último argumento do último comando executado. Portanto, escrever cd <ESC> <.> trará seu caminho / arquivo longo.

A tecla de atalho ALT + . (pressionada simultaneamente) funciona da mesma maneira.

Se você estiver usando o modo bash vi em vez do modo emacs do padrão, você pode simular esse comportamento com ALT + . se você alterar o arquivo ~\.inputrc com :

set keymap vi-insert

$if mode=vi
    "\e.": yank-last-arg
$endif
    
por 20.04.2015 / 08:28