bash 프롬프트의 현재 경로를 디렉토리 당 하나의 문자로 어떻게 단축 할 수 있습니까?


9

나는 어디에 있는지 기억할 수 없지만 이미 bash 프롬프트의 현재 경로가 흥미로운 방식으로 단축 된 것을 보았습니다. 경로에 포함 된 모든 디렉토리 (마지막 디렉토리 제외)는 첫 번째 문자로만 바뀝니다. 예를 들어 다음과 path/to/some/directory같이 단축됩니다 p/t/s/directory.

그 행동을 어떻게 재현 할 수 있습니까?


에서이 작업을 직접 수행 할 수 없습니다 PS1. PS1변수 ( PS1='${SHORT_PWD}\\$') 를 포함 하도록 설정 하고에서 변수 를 업데이트해야합니다 $PROMPT_COMMAND.
Gilles 'SO- 악마 중지'

@Gilles 'SO- 악의를 멈춰라'당신이 직접 할 수 있다는 것을 확신하십시오. 만약 큰 따옴표를 사용한다면 \$()명령 치환 을 백 슬래시해야합니다
bac0n

답변:


8

이것을 잠시 동안 재생 한 후 필요한 답변을 얻었습니다.

이것을 홈 디렉토리의 .bashrc 파일에 추가하고 터미널과 임차기를 종료하면 프롬프트가 표시됩니다.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

선언 된 함수 sps()를 사용하여 PS1프롬프트 인 변수 가 표시 될 때마다 경로를 평가합니다.

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

또는 ... 한 글자를 고집한다면

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

어떤 표시 :

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

고마워요 내 프롬프트는 실제로 user@pc부품을 제거하는 것 입니다. 어떻게 처리 할 수 ​​있습니까?
Alex

3

마지막 것을 제외한 모든 디렉토리 이름을 자르려면 :

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

디렉토리를 변경할 때 작동하지 않습니까?
Aditya Varma

1

파이썬이없는 마지막 이름을 제외한 모든 이름을 줄이십시오.

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.