Jak mogę skrócić bieżącą ścieżkę zachęty bash do jednej litery na katalog?


9

Nie pamiętam gdzie, ale już widziałem, że bieżąca ścieżka zachęty została skrócona w interesujący sposób: każdy katalog zawarty na ścieżce (oprócz ostatniego) jest zastępowany tylko pierwszą literą. Na przykład: path/to/some/directoryzostanie skrócony do p/t/s/directory.

Jak mogę odtworzyć to zachowanie?


Nie możesz tego zrobić bezpośrednio w PS1. Musisz ustawić, PS1aby zawierał zmienną ( PS1='${SHORT_PWD}\\$') i aktualizował tę zmienną w $PROMPT_COMMAND.
Gilles „SO- przestań być zły”

@Gilles „SO- przestań być zły” na pewno możesz to zrobić bezpośrednio, jeśli użyjesz podwójnego cudzysłowu, musisz \$()jednak
cofnąć

Odpowiedzi:


8

Po dłuższej zabawie z tym otrzymałem odpowiedź, której potrzebujesz:

Dodaj to do pliku .bashrc w katalogu domowym, zamknij terminal i wypożyczyć go, a otrzymasz monit.

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

Używa zadeklarowanej funkcji sps()do oceny ścieżki za każdym razem, gdy PS1wyświetlana jest zmienna będąca pytaniem

to znaczy

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

Lub ... jeśli nalegasz na jedną literę

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

Który wyświetla:

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

Dziękuję Meer. Mój monit w rzeczywistości polega na usunięciu user@pcczęści. Jak sobie z tym poradzić?
Alex

3

Aby obciąć wszystkie nazwy katalogów oprócz ostatniej:

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
}

To nie działa, gdy zmieniam katalogi?
Aditya Varma

1

skróć wszystkie nazwiska oprócz ostatniego bez Pythona:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.