Jika Anda memberikan nama lokal dari repo itu, sangat mudah menggunakan $ _ :
git clone git@github.com:npm/npm.git npm-local-dir && cd $_
Tetapi jika Anda tidak ingin mengetik ulang nama panjang, itu agak jelek tapi bisa dilakukan dengan sed:
git clone git@github.com:pckujawa/pattern-rec.git &&
cd `echo $_ | sed -n -e 's/^.*\/\([^.]*\)\(.git\)*/\1/p'`
EDIT: Ya, saya akan berterima kasih kepada Manav (komentar di bawah) untuk singkatnya
git clone foo/bar && cd !$:t
tetapi itu tidak bekerja di zsh (sesuatu tentang bagaimana zsh melakukan ekspansi menyebabkannya tidak memperlakukan perintah pertama sebagai input ke !$
). Saya harus mencari tahu apa yang !$:t
terjadi ( Memajukan dalam Bash Shell | $ {me: -apapun} ). !$
ambil bagian terakhir dari perintah sebelumnya dan :t
akan "Hapus semua komponen nama file terkemuka, biarkan ekor." Informasi yang bagus, tetapi saya berharap saya bisa membuatnya bekerja dengan zsh (saya mencoba noglob
tanpa hasil).
EDIT: Alih-alih menggunakan sed
atau !$:t
(yang tidak berfungsi di zsh, bagi saya toh), saya menemukan dua opsi lain (satu mengadaptasi https://unix.stackexchange.com/users/5685/frederik-deweerdt jawaban dengan https : //unix.stackexchange.com/users/129926/henrik-n komentar):
git clone git@github.com:npm/npm.git && cd $(basename $_ .git)
atau
git clone git@github.com:npm/npm.git && cd ${${_%%.git*}##*/}
~/.bashrc
file (misalnya) dan bagi saya setidaknya itu tidak berfungsi, saya perlu memperbaikinya dengan mengganti baris:/usr/bin/git "$@" 2>&1 | tee $tmp