탭 완성을 사용할 수 있습니다. 많은 Linux 배포판에서 기본적으로 bash는 [TAB] 키를 눌렀을 때 가능한 일치 목록이 표시되거나 일치하는 항목이 하나만 있으면 모두 채워지도록 설정됩니다. cd의 경우, 이것은 일반적으로 현재 작업 디렉토리의 서브 디렉토리 목록입니다. 덮어 쓸 수는 있지만 대신 jd"jump directory" 와 같은 별칭을 만드는 것이 좋습니다 .
alias jd=cd
그런 다음 원하는 "책갈피"를 jd의 완성으로 정의하십시오. bash 매뉴얼 페이지에서 더 많은 옵션 (명령 또는 함수에서 즉시 결과 자동 생성 포함)을 확인하십시오.하지만 가장 쉬운 방법은 다음과 같은 단어 목록입니다 -W.
완전한 -W "/ srv / www ~ / tmp ~ / work"jd
이제 jd[TAB]를 입력 하고 누르면 "북마크"가 표시됩니다. 모호한 부분을 입력 한 다음 [TAB]을 눌러 완료하십시오. (위에서 ~s가 내 홈 디렉토리로 확장되므로 첫 번째 [TAB]은 나에게을 제공하고 /, w다시 누르면 [TAB] /srv/www가 채워집니다.)
물론 ~/.bash_profile이것을 지속시키기 위해 이것을 넣으 십시오.
또는 다음 단계로 넘어갈 수 있습니다. ~/.shortcuts점으로 시작 하여 디렉토리를 숨기고 깔끔한 홈 디렉토리를 만들지 말고 원하는 디렉토리에 대한 심볼릭 링크로 채우십시오. 그런 다음 넣어 이 에 ~ / .bash_profile에 :
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
이것은 _list_shortcuts이름 목록을 작성하기 위해 기능에서 약간 더 복잡한 완성을 정의하며 jd, 단순한 별칭과 다른 기능을하기 때문에 단순한 별칭이 아닌 함수로 만듭니다 cd. -P에 플래그를 cd만든다 그것은 심볼릭 링크를 해결, 그래서 모든 것을 투명 마법된다. 바로 가기 이름은 대상과 일치하지 않아도됩니다.
그래서:
$ 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'하고 이유를 이해하지 못합니다. 그것은 내 자신의 새로운 질문일지도 모른다. :)