In tcsh, ho l'impostazione predefinita:
prompt [%m:%c3] %n%#
che fornisce prompt come:
[woehler:hacking/c/hello] ajcarr%
e
[woehler:~] ajcarr%
In altre parole, la directory corrente e fino alle due successive sopra di essa nel percorso.
In ksh93 o bash, la sostituzione di $HOME per ~ è facile, così come estrarre il nome della sola directory corrente, ma devo ancora trovare un modo per replicare %c3 comportamento di tcsh. Al momento in ksh93 ho:
[[email protected]] hello $
e
[[email protected]] ~ $
Qualcuno ha qualche suggerimento su come farlo?
Risposta accettata:
In ksh93 :
PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Se vuoi che sostituisca anche $HOME con ~ , è necessario qualcosa di più cattivo:
PS1='$(d=${PWD/#$HOME/"~"};printf %s "${d#${d%?/*/*/*}?/}") $ '
~/w/maemo $ cd sb2-pathmaps
w/maemo/sb2-pathmaps $ _
PS1='$(d=${PWD/#$HOME/"~"};printf %s "[${HOSTNAME%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
[host:w/maemo/sb2-pathmaps] user% _
Tutto questo dovrebbe funzionare anche in bash , sebbene bash ha i propri messaggi di escape (es. h per ${HOSTNAME%%.*} ) e il meccanismo di accorciamento del percorso (con PROMPT_DIRTRIM ).
Inoltre, la variante più cattiva sarà davvero cattiva, perché bash , a differenza di ksh93 , fork() un processo separato per ogni $(...; printf ...) sostituzione del comando, anche se contiene solo built-in. Questo vale anche per pdksh shell derivate, come mksh .
zsh ha prompt escape abbastanza simili ma non identici a tcsh :
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Nota:
Il $HOSTNAME la variabile non è impostata per impostazione predefinita in ksh93; al suo posto potresti usare uname builtin (dopo averlo abilitato con PATH=/opt/ast/bin:$PATH; il /opt/ast/bin il percorso non deve necessariamente esistere):
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
A differenza di h escape in bash o %m escape in zsh o tcsh questo sarà tenere traccia delle modifiche al nome host.