.kshrc
次のプロンプトを表示するように変更しました。コマンド番号は511 /export/home/students/cninja $
どこにあり、現在の作業ディレクトリはどこにありますか?511
../students/cninja
作業ディレクトリの短縮バージョンを表示してから、プロンプトに次の内容が表示されることは可能ですか?511 ~/cninja $
それとも511 ../students/cninja $
何がありますか?
私の行は次のとおりです.kshrc
。
PS1=' ! $PWD $'; export PS1
修正する:私のシェルがksh88なのかksh93なのかわかりません。ほとんどのecho *what have you*
コマンドは空の候補を返し、シェルとecho ${.sh.version}
バックからプロンプトを表示します/bin/ksh: ${.sh.version}: bad substitution
。
ベストアンサー1
kshのいくつかの実装があります:
- David Kornの元のバージョン(またはAT&T)には2つの主要なバリエーション(ksh88とksh93)があり、それぞれ異なるビルドと機能セットがあります。
pdksh
(パブリックドメインKornシェル)といくつかの派生物。zsh
。 Zshには、呼び出されたときに有効になるkshエミュレーションモードがありますksh
。
zshをkshとして使用することも、インタラクティブシェルとしてより強力なツールであるzshに完全に切り替えることもできます。
zshを呼び出すと、ksh
次のようにしてプロンプト拡張を取得できます(ファイルに追加$ENV
)。
setopt PROMPT_PERCENT # restore zsh prompt expansion disabled by the ksh mode
PS1='%! %~$ '
それ以外の場合は、AT&TまたはPDを使用し続ける必要がある場合は、次のようにおおよその計算を行うことができます。
PS1='! $(pwd | sed "s,^$HOME,~,")$ '
これはうまくいきますが、~
うまくいきません~other-user
。
例:
$ echo ${.sh.version}
Version JM 93u+ 2012-02-29
$ PS1='! $(pwd | sed "s,^$HOME,~,")$ '
85 ~$ cd /tmp
86 /tmp$ cd
87 ~$
数十年前の曖昧な記憶によると、ksh88はおそらく存在しないでしょう$PS1
。この場合でも、次のようないくつかのトリックを使用できます。
one=1
tilde='~'
PS1='! ${tilde[0${one#${PWD##"$HOME"*}1}]}${PWD#"$HOME"}$ '
ksh
(これはDebianのksh93u +、Solarisのksh88i、DebianのMirBSD ksh 40.9.20120630(pdksh派生)、およびDebianのzsh 4.3.17(呼び出し時)で動作することを確認しました。kshは機能しません)
アイデアは、$PWD
それが始まると空であるので空であるので、$HOME
私たちが得るものです。しかし、そうでない場合はis、isなので、配列に要素が1つしかないので、私たちが得るのは空の配列です。${PWD##"$HOME"*}
${one#1}
${tilde[0]}
$tilde
${PWD##"$HOME"*}
$PWD
${one#${PWD}1}
$one
${tilde[1]}
$tilde