GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit výzvu Ps1 v Bash nebo Ksh93 podobné Tcsh?

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.


Linux
  1. Jak napsat smyčku v Bash

  2. Zazimujte výzvu Bash v Linuxu

  3. Jak ladit Bash skript?

  1. Jak používat příkazy historie Bash

  2. Bash přepíše první řádek, výzva k bashu Ps1?

  3. Posílám výzvu PS1 přes ssh

  1. Jak přizpůsobit barvy a obsah bash v příkazovém řádku terminálu Linux

  2. Jak zkrátit Bash Prompt v Linuxu?

  3. Zvýraznit oddělovače cest v Ps1?