作業ディレクトリへの短いパスを表示するようにKornプロンプトを変更します。

作業ディレクトリへの短いパスを表示するようにKornプロンプトを変更します。

.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

おすすめ記事