Se você fornecer o nome local do repo, é muito fácil usar $ _ :
git clone git@github.com:npm/npm.git npm-local-dir && cd $_
Mas se você não deseja digitar novamente nomes longos, é um pouco feio, mas possível com o sed:
git clone git@github.com:pckujawa/pattern-rec.git &&
cd `echo $_ | sed -n -e 's/^.*\/\([^.]*\)\(.git\)*/\1/p'`
EDIT: Bem, eu estava indo para agradecer Manav (comentário abaixo) para o conciso
git clone foo/bar && cd !$:t
mas não funciona no zsh (algo sobre como o zsh faz expansões faz com que ele não trate o primeiro comando como entrada para !$
). Eu tive que procurar o que !$:t
fez ( Avançando no Bash Shell | $ {me: -whatever} ). !$
agarra a última parte do comando anterior e :t
"Remova todos os principais componentes de nome de arquivo, deixando a cauda". Boas informações, mas gostaria de poder fazê-lo funcionar com o zsh (tentei noglob
sem sucesso).
EDIT: Em vez de usar sed
ou !$:t
(o que não funciona em zsh, pelo menos para mim), eu encontrei duas outras opções (uma adaptação https://unix.stackexchange.com/users/5685/frederik-deweerdt resposta 's com https : //unix.stackexchange.com/users/129926/henrik-n's comment):
git clone git@github.com:npm/npm.git && cd $(basename $_ .git)
ou
git clone git@github.com:npm/npm.git && cd ${${_%%.git*}##*/}
~/.bashrc
arquivo (por exemplo) e para mim, pelo menos, não funcionou, eu precisava corrigi-la com a substituição do linha:/usr/bin/git "$@" 2>&1 | tee $tmp