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.