Cambia il \w
(minuscolo) a \W
(maiuscolo):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
^^
this one waaaaaay over here ------------------------------------------------+
Dai un'occhiata al Bash Prompt HOWTO per molti dettagli divertenti. esempio:
[email protected]:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$
[email protected]:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '
[email protected]:bin$
Il PROMPT_COMMAND
variabile, se impostata, è un comando che viene eseguito prima di visualizzare il prompt specificato in PS1
. Nel tuo caso, PROMPT_COMMAND
esegue un echo
istruzione con alcune sequenze di escape ANSI che manipolano la barra del titolo di un Xterm.
Se sospetti che il tuo PROMPT_COMMAND
sta sovrascrivendo il tuo PS1
richiesta, puoi unset
e testare le cose:
$ unset PROMPT_COMMAND
Infine, assicurati di modificare il PS1
definizione che effettivamente viene utilizzata. Le posizioni comuni sono /etc/bash.bashrc
, /etc/profile
, ~/.bashrc
, ~/.bash_profile
, ~/.profile
. I file di sistema sono generalmente (ma non sempre) eseguiti prima dei file utente.
Il semplice comando di sostituzione bash è
${VAR/pattern_to_find/pattern_to_replace}
Per mostrare l'ultima directory puoi semplicemente fare ${PWD/*\//}
, ovvero trova qualsiasi cosa prima e inclusa l'ultima '/
' e sostituiscilo con niente.
Sulla mia macchina Ubuntu uso:
export PS1='$(whoami):${PWD/*\//}#'.
La mia soluzione è mostrare le prime tre e le ultime due directory quando ce ne sono più di 5
Quindi il mio prompt (che contiene anche altre informazioni) è simile a:
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
quando il mio pwd è effettivamente
/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote
Il mio prompt PS1 è impostato come segue:
HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
git_branch
è una funzione che mostra il ramo git corrente, lo tengo nei miei file dot, è:
git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}