Nếu bạn cung cấp tên địa phương của repo, việc sử dụng $ _ : thực sự dễ dàng
git clone git@github.com:npm/npm.git npm-local-dir && cd $_
Nhưng nếu bạn không muốn gõ lại tên dài, thì hơi xấu nhưng có thể thực hiện được với sed:
git clone git@github.com:pckujawa/pattern-rec.git &&
cd `echo $_ | sed -n -e 's/^.*\/\([^.]*\)\(.git\)*/\1/p'`
EDIT: Vâng, tôi sẽ cảm ơn Manav (bình luận bên dưới) cho terse
git clone foo/bar && cd !$:t
nhưng nó không hoạt động trong zsh (một cái gì đó về cách zsh mở rộng khiến nó không coi lệnh đầu tiên là đầu vào !$). Tôi đã phải tìm kiếm những gì !$:tđã làm ( Tiến lên trong Bash Shell | $ {me: -whthing} ). !$lấy phần cuối của lệnh trước đó và :tsẽ "Xóa tất cả các thành phần tên tệp hàng đầu, để lại phần đuôi". Thông tin tốt, nhưng tôi ước tôi có thể làm cho nó hoạt động với zsh (Tôi đã cố gắng noglobkhông thành công).
EDIT: Thay vì sử dụng sedhoặc !$:t(không hoạt động trong zsh, dù sao đối với tôi), tôi đã tìm thấy hai tùy chọn khác (một điều chỉnh https://unix.stackexchange.com/users/5685/frederik-deweerdt 's trả lời bằng https : //unix.stackexchange.com/users/129926/henrik-n 's bình luận):
git clone git@github.com:npm/npm.git && cd $(basename $_ .git)
hoặc là
git clone git@github.com:npm/npm.git && cd ${${_%%.git*}##*/}
~/.bashrctệp (ví dụ) và đối với tôi ít nhất nó không hoạt động, tôi cần sửa nó bằng cách thay thế dòng:/usr/bin/git "$@" 2>&1 | tee $tmp