En tcsh, tengo el valor predeterminado:
prompt [%m:%c3] %n%#
que da avisos como:
[woehler:hacking/c/hello] ajcarr%
y
[woehler:~] ajcarr%
En otras palabras, el directorio actual y hasta los dos siguientes en la ruta.
En ksh93 o bash, la sustitución de $HOME
por ~
es fácil, al igual que extraer el nombre del directorio actual, pero todavía tengo que encontrar una forma de replicar el %c3
comportamiento de tcsh. Actualmente en ksh93 tengo:
[[email protected]] hello $
y
[[email protected]] ~ $
¿Alguien tiene alguna sugerencia sobre cómo hacer esto?
Respuesta aceptada:
En ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Si desea que también reemplace $HOME
con ~
, se necesita algo más desagradable:
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% _
Todo esto también debería funcionar en bash
, aunque bash
tiene sus propios escapes rápidos (p. ej., h
para ${HOSTNAME%%.*}
) y mecanismo de acortamiento de ruta (con PROMPT_DIRTRIM
).
Además, la variante más desagradable será realmente desagradable, porque bash
, a diferencia de ksh93
, fork()
un proceso separado para cada $(...; printf ...)
sustitución de comandos, incluso si solo contiene funciones integradas. Esto también es válido para pdksh
shells derivados, como mksh
.
zsh
tiene escapes rápidos bastante similares pero no idénticos a tcsh
:
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Nota:
El $HOSTNAME
la variable no está establecida de forma predeterminada en ksh93
; en lugar de eso, podría usar uname
incorporado (después de habilitarlo con PATH=/opt/ast/bin:$PATH
; el /opt/ast/bin
la ruta no necesita existir):
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
A diferencia de la h
escapar en bash o %m
escapar en zsh
o tcsh
esto será realizar un seguimiento de los cambios de nombre de host.