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後で変数にアクセスしようとしているため、サブシェルで実行すると機能しません(「コマンドの置き換え」を使用しない限り...)。

関連情報