Dans tcsh, j'ai la valeur par défaut :
prompt [%m:%c3] %n%#
qui donne des invites comme :
[woehler:hacking/c/hello] ajcarr%
et
[woehler:~] ajcarr%
En d'autres termes, le répertoire actuel et jusqu'aux deux suivants au-dessus dans le chemin.
Dans ksh93 ou bash, la substitution de $HOME
par ~
est facile, tout comme l'extraction du nom du répertoire actuel uniquement, mais je n'ai pas encore trouvé de moyen de répliquer le %c3
comportement de tcsh. Actuellement dans ksh93 j'ai :
[[email protected]] hello $
et
[[email protected]] ~ $
Quelqu'un a-t-il des suggestions sur la façon de procéder ?
Réponse acceptée :
En ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Si vous voulez qu'il remplace également $HOME
avec ~
, il faut quelque chose de plus méchant :
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% _
Tout cela devrait également fonctionner dans bash
, bien que bash
a ses propres échappements d'invite (par exemple, h
pour ${HOSTNAME%%.*}
) et mécanisme de raccourcissement de chemin (avec PROMPT_DIRTRIM
).
De plus, la variante la plus méchante sera vraiment méchante, car bash
, contrairement à ksh93
, va fork()
un processus séparé pour chaque $(...; printf ...)
substitution de commande, même si elle ne contient que des commandes intégrées. Cela vaut également pour pdksh
shells dérivés, comme mksh
.
zsh
a des échappements d'invite assez similaires mais pas identiques à tcsh
:
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Remarque :
Le $HOSTNAME
la variable n'est pas définie par défaut dans ksh93
; à la place, vous pouvez utiliser le uname
builtin (après l'avoir activé avec PATH=/opt/ast/bin:$PATH
; le /opt/ast/bin
le chemin n'a pas besoin d'exister):
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
Contrairement au h
échapper en bash ou %m
échapper en zsh
ou tcsh
cela va suivre les changements de nom d'hôte.