나는 내 홈 폴더에 있는 여러 디렉토리 사이를 끊임없이 이동해야 한다는 사실을 깨달았고, 그것들을 작성하는 데 지쳤습니다. 나는 전통적으로 심볼릭 링크인 더 빠른 방법을 원합니다.
그러나 나는 홈 디렉토리를 수십 개의 심볼릭 링크로 복잡하게 만들고 싶지 않습니다. 일부 ~/links/
디렉토리를 만들고 엉망으로 만들 수 있습니다.그것심볼릭 링크가 있지만 여전히 추악합니다. 또한 현재 디렉터리로 이동하기 위해 매일 변경되는 심볼릭 링크(.bashrc에 정의됨)를 만들고 싶을 수도 있습니다.
ls
빠른 탐색 링크로 인식되지만 홈 디렉토리를 실행할 때 실제로 표시되지 않고 현재 세션 이후에도 지속되지 않는 항목을 생성하여 심볼릭 링크의 별칭을 효과적으로 지정하는 방법이 있습니까 ?
답변1
쉘 별칭에는 (일부) 이름 완성이 적용될 수 있는 함수(일반적으로 바인딩됨)가 있습니다 tab. 또는 CDPATH
이름 완성을 지원하도록 "최근"(지난 5~6년 이내) 개선된 이 기능을 사용할 수 있습니다 . 이것이 효과가 있다면 입력하는 내용이 니모닉이 아닌 디렉토리의 실제 이름이라는 장점이 있습니다.
배쉬 매뉴얼에 따르면
CDPATH
검색 경로로 사용할 콜론으로 구분된 디렉터리 목록cd
내장 명령.
추가 자료:
답변2
자주 액세스하지만 매일 변경되지 않는 디렉터리의 경우 또 다른 옵션은 alias
파일에 몇 가지 명령을 포함하는 것입니다 .bashrc
.
alias cdo="cd /u01/app/oracle"
alias cdw="cd /var/www/html"
친구는 약 50개를 가지고 있고, 나는 빠르고 쉽게 가지고 있습니다. 오직
cdo
디렉토리를 /u01/app/oracle로 변경합니다.
답변3
탭 완성을 사용할 수 있습니다. 기본적으로 많은 Linux 배포판에서 bash는 [TAB] 키를 누르면 가능한 일치 항목 목록을 얻거나 일치 항목이 하나만 있으면 모두 채워지는 방식으로 설정되어 있습니다. CD의 경우 일반적으로 현재 작업 디렉터리의 하위 디렉터리 목록입니다. 이를 재정의할 수 있지만 대신 jd
"점프 디렉터리" 와 같은 별칭을 만드는 것이 좋습니다 .
alias jd=cd
그런 다음 jd의 완성으로 원하는 "북마크"를 정의하십시오. 더 많은 옵션(명령이나 함수의 결과를 동적으로 자동 생성하는 것을 포함)을 보려면 bash 매뉴얼 페이지를 확인하세요. 그러나 가장 간단한 것은 다음과 같은 단어 목록입니다 -W
.
전체 -W "/srv/www ~/tmp ~/work" jd
이제 jd
[TAB]을 입력하고 누르면 "북마크"가 표시됩니다. 불분명한 부분을 입력하고 [TAB]을 눌러 마무리합니다. (위에서 ~
s는 내 홈 디렉토리로 확장되므로 첫 번째 [TAB]은 [TAB]을 다시 클릭 /
하면 채워질 디렉토리를 제공합니다 .)w
/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'
이것은 나 자신의 새로운 질문일 수도 있습니다. :)
답변4
에 변수로 넣으면 ~/.bashrc
사라집니다 $
.
$ cat ~/.bashrc
if [ "$PS1" ]
then
export myproj=~/todays/fancy/project
fi
$ cd $myproj