Je ne me souviens plus où, mais j'ai déjà vu le chemin actuel de l'invite bash raccourci de manière intéressante: chaque répertoire contenu dans le chemin (à l'exception du dernier) est remplacé par sa première lettre uniquement. Par exemple: path/to/some/directory
serait raccourci à p/t/s/directory
.
Comment puis-je reproduire ce comportement?
Après avoir joué à cela pendant un moment, j'ai obtenu la réponse dont vous avez besoin:
Ajoutez-le à votre fichier .bashrc dans votre répertoire personnel, quittez le terminal et louez-le et vous obtiendrez une invite.
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}
Il utilise la fonction déclarée sps()
pour évaluer le chemin chaque fois que la variable PS1
qui est l'invite, est affichée.
c'est à dire
/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$
Ou ... si vous insistez sur la lettre
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}
Qui affiche:
/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$
Pour tronquer tous les noms de répertoires sauf le dernier:
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
}
La meilleure réponse (Meer Borg) regex saute pour les répertoires à une lettre, comme ça:
echo "/home/user/x/next_dir/other_dir" | sed -r 's|/(..)[^/]*|/\1|g'
/ho/us/x//ot
La fonction correcte serait:
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}
Désolé, je n'ai pas la réputation de commenter sous la réponse originale, lol