更改 Korn 提示符以顯示工作目錄的較短路徑
我已更改我
.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 而不是
$( )
構造。