คุณสามารถใช้ความสมบูรณ์ของแท็บ ตามค่าเริ่มต้นในลีนุกซ์รุ่นอื่น ๆ , bash จะถูกตั้งค่าเพื่อให้เมื่อคุณกดปุ่ม [TAB], คุณจะได้รับรายชื่อการแข่งขันที่เป็นไปได้, หรือหากมีการแข่งขันเพียงครั้งเดียว สำหรับ cd นี่เป็นรายการของไดเรกทอรีย่อยของไดเรกทอรีการทำงานปัจจุบัน คุณสามารถเขียนทับได้ แต่ฉันแนะนำให้สร้างนามแฝงแทนเช่นjd
"jump directory":
alias jd=cd
จากนั้นกำหนด "บุ๊กมาร์ก" ที่คุณต้องการให้เป็น jd ดูหน้า bash man เพื่อดูตัวเลือกเพิ่มเติมมากมาย (รวมถึงการสร้างผลลัพธ์อัตโนมัติในทันทีจากคำสั่งหรือฟังก์ชัน) แต่วิธีที่ง่ายที่สุดคือรายการคำด้วย-W
:
สมบูรณ์ -W "/ srv / www ~ / tmp ~ / work" jd
ทีนี้พิมพ์jd
และกด [TAB] แล้วคุณจะเห็น "บุ๊กมาร์ก" ของคุณ พิมพ์ส่วนที่ไม่ชัดเจนใด ๆ แล้วกด [TAB] เพื่อทำให้เสร็จ (ในข้างต้นการ~
ขยายไปยังโฮมไดเร็กตอรี่ของฉันดังนั้น [TAB] แรกให้ฉัน/
และถ้าฉันกดw
และ [TAB] อีกครั้ง/srv/www
จะถูกกรอก)
แน่นอนใส่ในนี้~/.bash_profile
เพื่อให้มันคงอยู่
หรือเราสามารถนำสิ่งนี้ไปสู่อีกระดับ สร้างไดเรกทอรี~/.shortcuts
- โดยเริ่มจากจุดมันจะถูกซ่อนไว้และไม่ยุ่งกับการสร้างไดเรกทอรีบ้านที่ดีของคุณและเติม symlink ให้กับไดเรกทอรีที่คุณต้องการ จากนั้นใส่สิ่งนี้ลงใน ~ / .bash_profile ของคุณ:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
กำหนดนี้เสร็จซับซ้อนกว่าเล็กน้อยใน fuction _list_shortcuts
ที่จะสร้างรายชื่อและทำให้เป็นฟังก์ชั่นมากกว่านามแฝงง่ายเนื่องจากเราต้องการให้ทำหน้าที่แตกต่างจากjd
cd
การ-P
ตั้งค่าสถานะเพื่อcd
ทำให้การแก้ไข symlink ดังนั้นทุกอย่างกลายเป็นเวทมนตร์โปร่งใส ชื่อทางลัดของคุณไม่จำเป็นต้องตรงกับเป้าหมาย
ดังนั้น:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
และสำหรับแฟนซีเพิ่มเติมให้ทำjd
รายการทางลัดทั้งหมดของคุณเมื่อดำเนินการโดยไม่มีพารามิเตอร์ใด ๆ :
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
หมายเหตุ: ฉันใช้compgen -W $( cmd )
แทนcompgen -C 'cmd'
เพราะสิ่งหลังไม่ได้ผลสำหรับฉันและฉันไม่เข้าใจว่าทำไม นั่นอาจเป็นคำถามใหม่ของฉันเอง :)