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.