Bạn có thể sử dụng hoàn thành tab. Theo mặc định trên nhiều bản phân phối Linux, bash được thiết lập để khi bạn nhấn phím [TAB], bạn sẽ được cung cấp một danh sách các kết quả khớp có thể hoặc nếu chỉ có một trận đấu, tất cả sẽ được điền. Đối với cd, đây thường là một danh sách các thư mục con của thư mục làm việc hiện tại. Bạn có thể ghi đè lên điều đó, nhưng tôi đề nghị thay vì tạo bí danh, như jd
cho "thư mục nhảy":
alias jd=cd
và sau đó, xác định "dấu trang" bạn muốn là hoàn thành cho jd. Nhìn vào trang bash man để biết thêm nhiều tùy chọn (bao gồm tự động tạo kết quả khi đang di chuyển từ một lệnh hoặc chức năng), nhưng cách dễ nhất chỉ là một danh sách các từ, với -W
:
hoàn thành -W "/ srv / www ~ / tmp ~ / work" jd
Bây giờ, nhập jd
và nhấn [TAB] và bạn sẽ thấy "dấu trang" của mình. Nhập bất kỳ phần mơ hồ nào, sau đó nhấn [TAB] để hoàn thành. (Trong phần trên, phần ~
mở rộng vào thư mục chính của tôi, vì vậy [TAB] đầu tiên cung cấp cho tôi /
và nếu tôi nhấn w
và [TAB] lần nữa, /srv/www
sẽ được điền vào.)
Tất nhiên, đặt điều này vào ~/.bash_profile
để làm cho nó tồn tại.
Hoặc, chúng ta có thể đưa nó lên cấp độ tiếp theo. Tạo một thư mục ~/.shortcuts
- bắt đầu bằng một dấu chấm, nó sẽ bị ẩn đi và không làm hỏng thư mục nhà sạch đẹp của bạn - và điền vào đó bằng các liên kết tượng trưng đến các thư mục bạn muốn. Sau đó, đặt cái này vào ~ / .bash_profile của bạn:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Điều này xác định một sự hoàn thành phức tạp hơn một chút trong phiên bản _list_shortcuts
để xây dựng danh sách các tên và biến nó jd
thành một hàm chứ không phải là một bí danh đơn giản, vì chúng ta muốn nó hoạt động khác với chỉ cd
. Các -P
lá cờ để cd
làm cho nó giải quyết liên kết tượng trưng, vì vậy tất cả mọi thứ trở nên trong suốt kỳ diệu. Tên phím tắt của bạn thậm chí không phải phù hợp với các mục tiêu.
Vì thế:
$ 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
Và, để có thêm một liều ưa thích, hãy lập jd
danh sách tất cả các phím tắt của bạn khi được thực hiện mà không có bất kỳ tham số nào:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Lưu ý: Tôi sử dụng compgen -W $( cmd )
thay compgen -C 'cmd'
vì bởi vì cái sau không bao giờ làm việc cho tôi và tôi không hiểu tại sao. Đó có thể là một câu hỏi mới của riêng tôi. :)