Wie kann ich den aktuellen Pfad der Bash-Eingabeaufforderung auf einen Buchstaben pro Verzeichnis verkürzen?


9

Ich kann mich nicht erinnern, wo, aber ich habe bereits gesehen, dass der aktuelle Pfad der Bash-Eingabeaufforderung auf interessante Weise verkürzt wurde: Jedes im Pfad enthaltene Verzeichnis (mit Ausnahme des letzten) wird nur durch seinen ersten Buchstaben ersetzt. Zum Beispiel: path/to/some/directorywürde auf verkürzt p/t/s/directory.

Wie kann ich dieses Verhalten reproduzieren?


Sie können dies nicht direkt in tun PS1. Sie müssten festlegen PS1, dass eine Variable ( PS1='${SHORT_PWD}\\$') enthalten ist, und diese Variable in aktualisieren $PROMPT_COMMAND.
Gilles 'SO - hör auf böse zu sein'

@ Gilles 'SO - hör auf böse zu sein' sicher, dass du es direkt tun kannst. Wenn du ein doppeltes Anführungszeichen verwendest, musst du allerdings \$()Befehlsersetzungen
rückwärts streichen

Antworten:


8

Nachdem ich eine Weile damit gespielt hatte, bekam ich die Antwort, die Sie benötigen:

Fügen Sie dies zu Ihrer .bashrc-Datei in Ihrem Home-Verzeichnis hinzu, beenden Sie das Terminal und mieten Sie es. Sie werden dann aufgefordert.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

Mit der deklarierten Funktion wird sps()der Pfad jedes Mal ausgewertet, wenn die Variable PS1angezeigt wird, die die Eingabeaufforderung darstellt

dh

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

Oder ... wenn Sie auf dem einen Buchstaben bestehen

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

Welche Anzeigen:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Danke Meer. Meine Eingabeaufforderung entfernt tatsächlich das user@pcTeil. Wie kann ich damit umgehen?
Alex

3

So kürzen Sie alle Verzeichnisnamen mit Ausnahme des letzten:

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
}

Das funktioniert nicht, wenn ich die Verzeichnisse ändere?
Aditya Varma

1

kürzen Sie alle Namen außer dem letzten ohne Python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.