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.