2009-04-27 77 views
2

在我目前的情况下,根据情况需要连接几台UNIX计算机,像几个不同的用户一样,并遍历机器上的各种目录。我通过整个事情使用ksh。在ksh中着色目录名称

我最近在摆弄我的提示,我能够根据当前的用户名和当前的服务器来改变颜色。但是,我也想要的是它根据我当前的目录来改变颜色。例如,如果我在目录“foo”中,提示符应该是黄色的,但如果我在目录“bar”中,提示符将是洋红色。在这两种情况下,子目录也应该计数,所以一个简单的子串检查就足够了。

我遇到的问题,但是,当我跑我的.profile脚本,它正常的颜色目录 - 但每当我切换到另一个目录不再动态更新 - 我不知道如何在我完成所有分支之前,即使在切换目录之后,我仍能够正确地打印当前的工作目录。

我做了一些Google搜索,并找到bash的信息,但ksh似乎在很大程度上被忽略。由于我无法自己弄清楚如何做到这一点,所以我必须将它带到Stack Overflow社区,以便将其添加到未来的知识中。因此,用我长篇大论的解释,我的问题的“快速版本”如下:

在ksh中,如何设置我的提示来显示当前工作目录并根据当前的文本颜色工作目录是?它甚至有可能吗?

回答

1

为什么不使用zsh?它基于ksh,功能更强大。在zsh中,您可以编写每次更改目录时隐式调用的chpwd函数。在此功能,您可以查看当前目录,并设置PS1到任何你想要的。

或者(甚至在KSH),您可以创建cd命令的别名:

change_my_ps() { 
    PS1=... 
} 
better_cd() { 
    builtin cd "[email protected]" 
    change_my_ps 
} 
alias cd=better_cd 

这样的事情。我不知道这是正确的,我不记得KSH的语法。

-1

我用这个:

function chdir 
{ 
    cd "[email protected]" 
    CWDH=${PWD%/*} 
    PS1="($_time)$hname:${CWDH##*/}/${PWD##*/} ->" 
    export PS1 
} 
alias cd=chdir 
chdir . 

忽略了时间和hname,但剩下的应该为你工作。改变颜色将取决于终端。您需要知道您将使用的终端的每种颜色的转义码。如果你知道你只使用过一个xterm,它会更容易。

1

要在ksh中显示当前目录,请将它放在.profile文件中: export PS1 =“\ $ PWD” 当您更改目录而不用使用函数时,会动态更新。

0

因为没有人真正回答了关于颜色的部分,这里就是我会做。我不能上色的文本,所以我也包括我的终端的屏幕截图。

有关颜色代码的完整列表,请参阅Wikipedia's page on ANSI escape codes,关于在ksh中打印转义序列的详细信息,请参阅print --manprintf --man。 (注意,目前处于测试阶段的ksh93v将包含一个基于(我认为)基于bash的提示语言,这将使这种事情更容易一些,不过我认为你可能仍然需要使用类似这样的东西函数来完成复杂的条件提示,像这样的。)

> cat ~/scripts/prompt  
function prompt 
{ 
    set -eu 
    typeset c= 
    case $PWD in 
     */foo) c=3;; # yellow 
     */bar) c=5;; # magenta 
    esac 
    print "\E[3${c}m$PWD\E[m > " 
} 
PS1='`prompt`' 
> . ~/scripts/prompt 
/Users/adavies > cd foo 
/Users/adavies/foo > cd ../bar 
/Users/adavies/bar > 

enter image description here