Bash 프롬프트에서 매우 긴 디렉터리 이름을 줄입니다.

Bash 프롬프트에서 매우 긴 디렉터리 이름을 줄입니다.

이 팁을 얻는 방법

~/this/is/a-very-very-long-directory-name/dir

이와 관련하여

~/this/is/a-ver...name/dir

bash 프롬프트에서?

따라서 nn(20+)자보다 긴 디렉터리 이름은 xxxx...xxxx로 단축됩니다.

중복 가능성에 유의하세요. /to/dir의 긴 경로가 아닌 긴 디렉터리 이름을 단축하고 싶습니다.

답변1

당신은 다음과 같은 것을 사용해야합니다, bash에는 내장 메소드가 없습니다.

 d='~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one'
# or, d=$(pwd)
e=$( echo "$d" | sed -E 's#([^/]{4})[^/]{13,}([^/.]{3})#\1...\2#g' )
echo "$e"
~/this/is/a-ve...ame/with...ame/and-...one

반면에 프롬프트에 개행 문자를 추가할 수도 있습니다. 나는 다음과 같은 것을 사용합니다 :

PS1='\u@\h:\w\n\$ '

이것은 다음과 같습니다

jackman@myhost:~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one
$ _

답변2

쉘의 "매개변수 확장"을 사용하여 시도해 보십시오.

d='~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one'
IFS=/
for DIR in $d
  do    [ ${#DIR} -gt 8 ] &&    { TMP=${DIR%%${DIR#????}}
                                  DIR=$TMP...${DIR##${DIR%????}}
                                }
        NEW="$NEW${NEW:+/}$DIR"
  done
echo "$NEW"
~/this/is/a-ve...name/with...name/and-...-one

IFS필요한 경우 저장하고 복원하십시오. NEW나중에 변수에 액세스 하려고 하기 때문에 서브셸에서 실행하면 작동하지 않습니다 ("명령 대체"를 사용하지 않는 한...).

관련 정보