Come posso abbreviare il percorso corrente del prompt di bash a una lettera per directory?


9

Non ricordo dove, ma ho già visto il percorso corrente del prompt bash accorciato in modo interessante: ogni directory contenuta nel percorso (tranne l'ultima) è sostituita solo dalla sua prima lettera. Ad esempio: path/to/some/directorysarebbe abbreviato in p/t/s/directory.

Come posso riprodurre quel comportamento?


Non puoi farlo direttamente in PS1. Dovresti impostare PS1per contenere una variabile ( PS1='${SHORT_PWD}\\$') e aggiornare quella variabile in $PROMPT_COMMAND.
Gilles 'SO-smetti di essere malvagio'

@Gilles 'SO- smetti di essere malvagio' sicuro di poterlo fare direttamente, se usi la doppia virgoletta devi \$()però sostituire le sostituzioni di comandi
bac0n

Risposte:


8

Dopo aver giocato con questo per un po 'ho avuto la risposta che richiedi:

Aggiungi questo al tuo file .bashrc nella tua home directory, esci dal terminale e affittalo e ti verrà richiesto.

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

Utilizza la funzione dichiarata sps()per valutare il percorso ogni volta PS1che viene visualizzata la variabile che è il prompt

vale a dire

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

O ... se insisti sull'unica lettera

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

Che visualizza:

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

Grazie Meer. Il mio prompt sta effettivamente rimuovendo la user@pcparte. Come posso gestirlo?
Alex,

3

Per troncare tutti i nomi di directory tranne l'ultimo:

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
}

Questo non funziona quando cambio le directory?
Aditya Varma,

1

abbreviare tutti i nomi tranne l'ultimo senza Python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.