Existem algumas implementações do ksh:
- O original (ou AT & T) de David Korn com duas variantes principais (ksh88 e ksh93), cada uma com versões diferentes com um conjunto de recursos diferente
-
pdksh(o shell Korn de domínio público) com alguns derivativos. -
%código%. Zsh tem um modo de emulação ksh que é ativado quando chamado como
zsh.
Você pode querer usar o zsh como seu ksh, ou até mesmo mudar para o zsh, que é uma ferramenta muito mais poderosa como um shell interativo.
Se você chamar zsh como ksh . Você pode fazer a expansão de prompt desejada (adicioná-lo ao seu arquivo ksh ):
setopt PROMPT_PERCENT # restore zsh prompt expansion disabled by the ksh mode
PS1='%! %~$ '
Caso contrário, se você precisar ficar com os do AT & T ou do PD, poderá aproximá-lo com:
PS1='! $(pwd | sed "s,^$HOME,~,")$ '
O que funcionaria para $ENV , mas não para ~ .
Exemplo:
$ echo ${.sh.version}
Version JM 93u+ 2012-02-29
$ PS1='! $(pwd | sed "s,^$HOME,~,")$ '
85 ~$ cd /tmp
86 /tmp$ cd
87 ~$
De uma lembrança vaga de décadas atrás, pode ser que o ksh88 não expanda as substituições de comandos dentro de ~other-user . Nesse caso, você ainda pode usar algum truque como:
one=1
tilde='~'
PS1='! ${tilde[0${one#${PWD##"$HOME"*}1}]}${PWD#"$HOME"}$ '
(que eu agora verifiquei funciona em todos do ksh93u + no Debian, ksh88i no Solaris, MirBSD ksh 40.9.20120630 (derivada pdksh) no Debian, e zsh 4.3.17 (quando chamado como $PS1 ) no Debian, então eu ficaria surpreso se houvesse algum ksh onde ele não funcionou)
A ideia é que, se ksh começar com $PWD , então $HOME estará vazio, então ${PWD##"$HOME"*} estará vazio, por isso, obteremos ${one#1} , que é ${tilde[0]} . Mas se não for assim, $tilde é ${PWD##"$HOME"*} , então $PWD é ${one#${PWD}1} , por isso, obtemos $one , que é vazio como a matriz ${tilde[1]} como apenas um elemento.