Prompt

更改 Korn 提示符以顯示工作目錄的較短路徑

  • June 6, 2018

我已更改我.kshrc的提示符,如下所示: 命令號511 /export/home/students/cninja $在哪裡,並且是目前工作目錄。511``../students/cninja

是否可以顯示工作目錄的縮短版本,然後提示顯示如下內容:511 ~/cninja $或者511 ../students/cninja $你有什麼?

這就是我的線的樣子.kshrc

PS1=' ! $PWD $'; export PS1


**更新:**我無法確定我是否擁有 ksh88 或 ksh93 shell。大多數echo *what have you*命令從 shell 返回空白凝視和提示,並echo ${.sh.version}返回/bin/ksh: ${.sh.version}: bad substitution.

ksh 存在一些實現:

  • David Korn 的原始版本(或 AT&T)有兩個主要變體(ksh88 和 ksh93),每個變體都有不同的版本和不同的功能集
  • pdksh(公共領域的 Korn shell)和一些衍生產品。
  • zsh. Zsh 有一個 ksh 仿真模式,它在呼叫時啟動ksh

您可能想使用 zsh 作為您的 ksh,或者甚至完全切換到 zsh,這是一個作為互動式 shell 的更強大的工具。

如果您將 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"}$ '

(我現在已經驗證適用於 Debian 上的所有 ksh93u+、Solaris 上的 ksh88i、Debian 上的 MirBSD ksh 40.9.20120630(pdksh 衍生產品)和 Debian 上的 zsh 4.3.17(稱為ksh),所以我會感到驚訝如果有任何 ksh 不起作用)

這個想法是如果$PWD以 開頭$HOME${PWD##"$HOME"*}則為空,因此${one#1}為空,因此我們${tilde[0]}得到$tilde。但是如果不是 then ${PWD##"$HOME"*}is $PWD, then ${one#${PWD}1}is $one,所以我們得到${tilde[1]}哪個是空的,因為$tilde數組只有一個元素。

我認為以下方法會起作用,但事實證明這是一個特定於 bash 的解決方案。將此答案留作參考。

export PS1=' ! $( basename $PWD )'

也許它需要 backtics 而不是$( )構造。

引用自:https://unix.stackexchange.com/questions/51841