หากคุณให้ชื่อท้องถิ่นของ repo มันง่ายมากที่จะใช้$ _ :
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'`
แก้ไข: ดีฉันจะขอบคุณ Manav (ความคิดเห็นด้านล่าง) สำหรับบทกวี
git clone foo/bar && cd !$:t
แต่มันใช้งานไม่ได้ใน zsh (บางอย่างเกี่ยวกับวิธีที่ zsh ขยายเพิ่มทำให้ไม่ต้องใช้คำสั่งแรกเป็นอินพุต!$
) ฉันต้องค้นหาสิ่งที่!$:t
ทำ ( ล้ำหน้าใน Bash Shell | $ {me: -whething} ) !$
คว้าส่วนสุดท้ายของคำสั่งก่อนหน้านี้และ:t
จะ "ลบองค์ประกอบชื่อไฟล์ชั้นนำทั้งหมดออกจากส่วนท้าย" ข้อมูลที่ดี แต่ฉันหวังว่าฉันจะสามารถใช้งาน zsh ได้ (ฉันพยายามnoglob
ไม่ประสบความสำเร็จ)
แก้ไข: แทนที่จะใช้sed
หรือ!$:t
(ซึ่งใช้งานไม่ได้ใน zsh สำหรับฉันแล้ว) ฉันพบสองตัวเลือกอื่น (หนึ่งการปรับhttps://unix.stackexchange.com/users/5685/frederik-deweerdtคำตอบด้วยhttps : //unix.stackexchange.com/users/129926/ความคิดเห็นของHenrik- 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