[unix] 쉘 프롬프트에서 축약 된 현재 디렉토리?

vim 조금 길 때 경로에서 활용하는 정말 멋진 기능이 있습니다.

여기에 이미지 설명을 입력하십시오

맨 위에있는 탭에서 문서의 경로를 줄여줍니다. 이것과 비슷한 것을 할 수있는 방법이 있습니까? 내 bash 프롬프트는 다음과 같이 보이지 않습니다 :

rfkrocktk@work-laptop ~/Documents/Projects/Work/maventest/src/main/java/com/tkassembled/ $ 



답변

이것을 시도 하십시오 :

PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'

또는 순수한 배쉬 :

PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'

그때

PS1='\u@\h ${PS1X} $ '

를 생성합니다 (에 ~대한 알림 ${HOME}) :

rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $

@enzotib의 덕분에 답변이 향상되었습니다.


답변

@nicerobot 답변과 비슷하지만 다소 짧습니다.

PROMPT_COMMAND='pwd2=$(sed "s:\([^/]\)[^/]*/:\1/:g" <<<$PWD)'
PS1='\u@\h:$pwd2\$ '

다음 예제 출력이 표시됩니다.

enzotib@acer:/h/enzotib$ cd
enzotib@acer:/h/enzotib$ cd /usr/share/doc/acpid/examples/
enzotib@acer:/u/s/d/a/examples$


답변

나는 PROMPT_DIRTRIMbash에서 좋아한다 …

export PROMPT_DIRTRIM=2

예제 프롬프트를 다음으로 변경합니다 …

rfkrocktk@work-laptop ../com/tkassembled/ $

그것은 나를 위해 작동합니다.


답변

에 추가 enzotib , 다음 코드는 것이다 대답의 ‘

  1. 변환 /Path/To/Your/Home/~/(경로가 될 수 있도록 ~/a/b/c대신 /P/T/Y/H/a/b/c)
  2. 점만 표시하는 대신 ‘점 파일’의 첫 글자를 사용하십시오 ( /a/./c/d가됩니다 /a/.b/c/d) :

    PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:\1/:g" <<< ${PWD/#$HOME/\~})'
    export PS1='\u@\h:$PS1_PATH\$ '

작은 따옴표를 사용하십시오. 그렇지 않으면 bash가 조기에 확장합니다.


답변

귀하의 형식 PS1\W( man 페이지 의 PROMPTING섹션을 bash참조하십시오).

PS1="\u@\h \W\$ "

그리고 다른 옵션을 읽고 싶을 수도 있습니다. 명령 행으로 멋진 일을 할 수 있습니다.


답변

nicerobot의 예제 출력을 좋아하지만 한 가지 문제가 있습니다. 나는 거기에 하이픈이있는 디렉토리가 A-E, 그리고 그것을보고 있었다 -E인수로 printf내 현재 작업 디렉토리 때. 이 문제를 해결하기 위해 출력 할 것이없는 경우 --마지막 printf에 따옴표를 추가하고 출력 주위에 따옴표를 추가했습니다.

p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf -- "${q:1}"


답변