このヒントを入手する方法
~/this/is/a-very-very-long-directory-name/dir
これに関して
~/this/is/a-ver...name/dir
bashプロンプトで?
したがって、nn(20+)文字より長いディレクトリ名はxxxx ... xxxxに短縮されます。
重複の可能性に注意してください。 /to/dirの長いパスではなく、長いディレクトリ名を短くしたいと思います。
答え1
あなたは次のようなものを使用する必要がありますsed、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
後で変数にアクセスしようとしているため、サブシェルで実行すると機能しません(「コマンドの置き換え」を使用しない限り...)。