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à :t
sẽ "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 noglob
không thành công).
EDIT: Thay vì sử dụng sed
hoặ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*}##*/}
~/.bashrc
tệ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