2009-04-27 5 views
2

В моей нынешней ситуации для меня не редкость иметь несколько компьютеров UNIX, к которым я подключаюсь, как несколько разных пользователей в зависимости от ситуации, и перемещаться по различным каталогам на машинах, которые делают вещи. Я использую ksh через всю вещь.Имя каталога раскраски в ksh

Недавно я возился со своим приглашением, и мне удалось заставить его изменить некоторые цвета в зависимости от моего текущего имени пользователя и текущего сервера. Тем не менее, я бы тоже хотел, чтобы он менял цвета на основе моего текущего каталога. Например, если бы я находился в каталоге «foo», приглашение должно быть желтым, но если бы я находился в директории «bar», подсказка была бы пурпурной. В обоих случаях поддиректории также должны учитываться, поэтому достаточно простой проверки подстроки.

Проблема, с которой я столкнулся, заключается в том, что когда я запускаю свой .profile-скрипт, он правильно окрашивает каталог - но он больше не динамически обновляется всякий раз, когда я переключаюсь на другой каталог - и я не уверен, как прежде чем я сделал все разветвления, я смог заставить его правильно напечатать текущий рабочий каталог даже после переключения каталогов.

Я сделал несколько поисковых запросов и нашел информацию для bash, но ksh, похоже, в значительной степени игнорируется. Поскольку я не могу понять, как это сделать сам по себе, я должен привести его в сообщество переполнения стека, чтобы добавить его в будущие знания. Таким образом, с моим длинным объяснением, «быстрая версия» моего вопроса выглядит следующим образом:

В 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: экспорт PS1 = «\ $ PWD» Это будет динамически обновлять при изменении каталога без отводом вокруг с функциями.

0

Поскольку никто не ответил на вопрос о цвете, вот как я это сделаю. Я не могу покрасить текст, поэтому я также включил скриншот моего терминала.

Для получения полного списка цветовых кодов и print --man и printf --man см. Wikipedia's page on ANSI escape codes для получения подробной информации о печатных escape-последовательностях в ksh.

(Обратите внимание, что ksh93v, находящийся в настоящее время в бета-версии, будет содержать язык, основанный на словах (я думаю) на bash's, что сделает эту вещь несколько проще, хотя, я думаю, вам, вероятно, все равно придется использовать что-то вроде этого функция делать сложные условные подсказки, как этот.)

> 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

Смежные вопросы