2015-05-18 5 views
1

Я работаю

над несколькими проектами: A, B, C, D, E и F. я иду, хотя все мои проекты через Terminal, и обмен между ними через Terminal Вкладки.Как проверить текущий путь в bash?

Иногда, я путаюсь между проектами, потому что у них есть такой же цвет текста, в этом случае желтый.

enter image description here


Я пытаюсь

, чтобы добиться чего-то вроде этого:

enter image description here

Я хотел бы назначить другую цветовую базу на пути тока проект.

Как проверить текущий путь в bash?


.bash_profile
#================================ 
#   Colors    = 
#================================ 

black="\[\033[0;30m\]" 
blue="\[\033[1;37m\]" 
green="\[\033[0;32m\]" 
cyan="\[\033[0;36m\]" 
red="\[\033[0;31m\]" 
purple="\[\033[0;35m\]" 
brown="\[\033[0;33m\]" 
lightgray="\[\033[0;37m\]" 
darkgray="\[\033[1;30m\]" 
lightblue="\[\033[1;34m\]" 
lightgreen="\[\033[1;32m\]" 
lightcyan="\[\033[1;36m\]" 
lightred="\[\033[1;31m\]" 
lightpurple="\[\033[1;35m\]" 
yellow="\[\033[1;33m\]" 
white="\[\033[1;37m\]" 
nc="\[\033[0m\]" 

if [ "\w" == "~/dev/projects/biv2" ]; then 
    export PS1="──$white[$blue\w$white] \n└── $white" 
fi 

// Default Color 
export PS1="──$white[$yellow\w$white] \n└── $white" 
+0

'\ w' не является переменной; это просто макрос, который расширяется оболочкой при отображении одного из приглашений. – chepner

+0

Не могли бы вы помочь мне решить эту проблему? Заранее спасибо. Я новичок в bash. – ihue

+1

Ответ на этот вопрос. – chepner

ответ

3

Вы должны будете использовать PROMPT_COMMAND, чтобы проверить, что текущий каталог только перед отображением подсказки, и установите значение PS1 соответственно.

prompt_cmd() { 
    case $PWD in 
     ~/dev/projects/biv2) dircolor=$yellow ;; 
     ~/dev/projects/other) dircolor=$blue ;; 
     # and so on. For any other directory, 
     *) dircolor=$green 
    esac 
    PS1="──$white[$dircolor\w$white] \n└── $white" 
} 

PROMPT_COMMAND=prompt_cmd 

Без PROMPT_COMMAND, вы могли бы сделать что-то вроде

set_dir_color() { 
    case $PWD in 
     ~/dev/projects/biv2) dircolor=$yellow ;; 
     ~/dev/projects/other) dircolor=$blue ;; 
     # and so on. For any other directory, 
     *) dircolor=$green 
    esac 
    echo "$dircolor" 
} 

PS1="──$white[\$(set_dir_color)\w$white] \n└── $white" 
+0

Ух ты .. Впечатляющий. Я тестирую это сейчас. Я обязательно приму его, если он сработает. ! Благодарю. – ihue

+0

Наконец, вы сказали, что я должен использовать 'PROMPT_COMMAND', просто из любопытства, откуда мы это получаем? – ihue

+0

Вам нужно 'PROMPT_COMMAND' для этого или вы можете просто вставить этот вызов функции внутри' PS1' напрямую? Я бы предположил, что 'PS1' оценивается в контексте рабочего каталога (но, возможно, нет). –

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