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.