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.