web-dev-qa-db-fra.com

Comment puis-je raccourcir le chemin actuel de l'invite bash à une lettre par répertoire?

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?

8
Anto

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$ 
7
Meer Borg

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
}
2
askory

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

2
mario1ua