Câu trả lời:
Tôi có một chức năng nhỏ tiện dụng mà tôi sử dụng:
# A function to help with creating directory aliases and providing
# completion for them.
# Taken from here:
# http://blog.caioromao.com/2010/10/10/Custom-directory-completion.html
# Tweaked to work with more than just 'cd'
_make_dir_complete() {
local aliasname=$1
local prgname="__s_${aliasname}__"
cd "$3" >/dev/null 2>&1
local dirname=$(pwd -L)
local realpath=$(pwd -P)
cd - >/dev/null 2>&1
FUNC="function $prgname() {
local cur len wrkdir;
local IFS=\$'\\n'
wrkdir=\"$realpath\"
cur=\${COMP_WORDS[COMP_CWORD]};
len=\$((\${#wrkdir} + 2));
COMPREPLY=( \$(compgen -S/ -d \$wrkdir/\$cur| cut -b \$len-) );
}"
ALIAS="$aliasname () { $2 \"$dirname/\$*\"; }"
eval $FUNC
eval $ALIAS
complete -o nospace -F $prgname $aliasname
}
Và sau đó tôi có một số mã như thế này để thiết lập các phím tắt của mình:
test -e ~/projects &&
_make_dir_complete cdp cd ~/projects &&
_make_dir_complete pdp pushd ~/projects
Điều này sẽ thiết lập hai hàm bash, cdp
và pdp
. cdp
Tôi sử dụng để thay đổi thư mục, vì vậy tôi làm một cái gì đó như cdp foo
, sẽ dịch thành cd ~/projects/foo
. pdp
hoạt động tương tự, nhưng sử dụng pushd
thay thế. Phần hay là nó cũng hoàn thành, vì vậy tôi có thể gõ cdp f
, sau đó nhấn TAB
và nó sẽ hoàn thành với cdp foo
.
Tôi đã thiết lập điều này trong .bashrc
:
alias re='cd /home/terdon/research/'
Vì vậy, nếu tôi gõ re
tại dấu nhắc BASH, tôi trực tiếp cd
trong tôi research
danh mục.
Điều này hoạt động tốt nếu bạn chỉ muốn thay đổi vào thư mục trong câu hỏi. Một cách khác là đặt một bí danh lặp lại đường dẫn thư mục:
alias foo='echo /path/to/bar'
Sau đó, bạn có thể làm, ví dụ:
$ ls `foo`
Bạn sẽ cần các dấu phẩy đảo ngược mặc dù. Theo tôi biết, không có cách nào để thiết lập một nhân vật đơn giản, không có trích dẫn hay $
để làm những gì bạn muốn trong BASH. Nó Là có thể trong zsh với "thư mục được đặt tên".
Cuối cùng, bạn có thể tìm thấy một số lời khuyên thú vị đây .