Если вы укажете локальное имя репо, использовать $ _ очень просто :
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'`
РЕДАКТИРОВАТЬ: Ну, я собирался поблагодарить Манав (комментарий ниже) за краткий
git clone foo/bar && cd !$:t
но он не работает в zsh (что-то из-за того, как zsh делает расширения, заставляет его не рассматривать первую команду как вход !$
). Я должен был посмотреть, что !$:t
сделал ( Продвижение в Bash Shell | $ {me: -whither} ). !$
берет последнюю часть предыдущей команды и :t
удаляет все ведущие компоненты имени файла, оставляя хвост. Хорошая информация, но хотелось бы, чтобы она работала с zsh (я пытался noglob
безуспешно).
РЕДАКТИРОВАТЬ: Вместо использования sed
или !$:t
(который не работает в zsh, для меня в любом случае), я нашел два других варианта (один адаптирует https://unix.stackexchange.com/users/5685/frederik-deweerdt с https : //unix.stackexchange.com/users/129926/henrik-n 's комментарий):
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