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


9

Je ne me souviens pas 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/directoryserait raccourci à p/t/s/directory.

Comment reproduire ce comportement?


Vous ne pouvez pas le faire directement en PS1. Vous devez définir PS1pour contenir une variable ( PS1='${SHORT_PWD}\\$') et mettre à jour cette variable dans $PROMPT_COMMAND.
Gilles 'SO- arrête d'être méchant'

@Gilles 'SO- arrêtez d'être maléfique', vous pouvez le faire directement, si vous utilisez des guillemets doubles, vous devez cependant contre\$()
obliquer les

Réponses:


8

Après avoir joué avec cela pendant un certain temps, j'ai obtenu la réponse dont vous avez besoin:

Ajoutez-le à votre fichier .bashrc dans votre répertoire personnel, quittez le terminal et le loueur 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 PS1qui 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 seule 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$ 

Merci encore. Mon invite supprime en fait la user@pcpièce. Comment puis-je gérer cela?
Alex

3

Pour tronquer tous les noms de répertoire 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
}

Cela ne fonctionne pas lorsque je modifie les répertoires?
Aditya Varma

1

raccourcir tous les noms sauf le dernier sans python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.