V tcsh mám výchozí:
prompt [%m:%c3] %n%#
což dává výzvy jako:
[woehler:hacking/c/hello] ajcarr%
a
[woehler:~] ajcarr%
Jinými slovy, aktuální adresář a až dva další nad ním v cestě.
V ksh93 nebo bash, náhrada $HOME
od ~
je snadné, stejně jako extrahování názvu pouze aktuálního adresáře, ale ještě jsem nenašel způsob, jak replikovat %c3
chování tcsh. V současné době v ksh93 mám:
[[email protected]] hello $
a
[[email protected]] ~ $
Má někdo nějaké návrhy, jak to udělat?
Přijatá odpověď:
V ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Pokud chcete, aby také nahradil $HOME
s ~
, je potřeba něco ošklivějšího:
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% _
To vše by mělo fungovat i v bash
, ačkoli bash
má své vlastní únikové cesty (např. h
pro ${HOSTNAME%%.*}
) a mechanismus zkracování cesty (pomocí PROMPT_DIRTRIM
).
Také ošklivější varianta bude opravdu ošklivá, protože bash
, na rozdíl od ksh93
, bude fork()
samostatný proces pro každý $(...; printf ...)
substituce příkazů, i když obsahuje pouze vestavěné moduly. To platí také pro pdksh
odvozené shelly, jako je mksh
.
zsh
má prompt escape docela podobné, ale ne totožné s tcsh
:
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Poznámka:
$HOSTNAME
proměnná není ve výchozím nastavení v ksh93
nastavena; místo toho můžete použít uname
vestavěný (po jeho povolení pomocí PATH=/opt/ast/bin:$PATH
; /opt/ast/bin
cesta nemusí existovat):
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
Na rozdíl od h
escape v bash nebo %m
escape v zsh
nebo tcsh
toto bude sledovat změny názvu hostitele.