Якщо ви вкажете локальну назву репо, це дуже просто використовувати $ _ :
git clone git@github.com:npm/npm.git npm-local-dir && cd $_
Але якщо ви не хочете вводити довгі імена, це трохи некрасиво, але це можливо з sed:
git clone git@github.com:pckujawa/pattern-rec.git &&
cd `echo $_ | sed -n -e 's/^.*\/\([^.]*\)\(.git\)*/\1/p'`
EDIT: Ну, я збирався подякувати Манаву (коментар нижче) за короткий час
git clone foo/bar && cd !$:t
але він не працює в zsh (щось про те, як zsh виконує розширення, змушує його не трактувати першу команду як вхід до !$
). Мені довелося шукати, що !$:t
зробив ( Просування в шквалу Баша | $ {me:-що завгодно ). !$
захоплює останню частину попередньої команди та :t
"Видалить усі провідні компоненти імен файлів, залишаючи хвіст." Хороша інформація, але я б хотів, щоб я міг змусити її працювати з zsh (я намагався noglob
без успіху).
EDIT: Замість того , щоб використовувати sed
або !$:t
(який не працює в Zsh, для мене у всякому разі), я знайшов два інших варіанти (один адаптують https://unix.stackexchange.com/users/5685/frederik-deweerdt «s відповідь з HTTPS : //unix.stackexchange.com/users/129926/ коментарhenhen-n):
git clone git@github.com:npm/npm.git && cd $(basename $_ .git)
або
git clone git@github.com:npm/npm.git && cd ${${_%%.git*}##*/}
~/.bashrc
файл (наприклад), і для мене, принаймні, це не спрацювало, мені потрібно було виправити її із заміною рядок:/usr/bin/git "$@" 2>&1 | tee $tmp