2010-07-18 2 views
15

Обычно я использую zsh, который обеспечивает крюк chpwd(). То есть: если cwd изменяется с помощью встроенного cd, zsh автоматически вызывает метод chpwd(), если он существует. Это позволяет настраивать переменные и псевдонимы, которые зависят от cwd.Есть ли крючок в Bash, чтобы узнать, когда изменится cwd?

Теперь я хочу перенести этот бит моего .zshrc в bash, но обнаружил, что chpwd() не распознается bash. Является ли аналогичная функциональность уже существующей в bash? Я знаю, что переопределение работы cd (см. Ниже), но я нацелен на более элегантное решение.

function cd() 
{ 
    builtin cd [email protected] 
    chpwd 
}
+4

Почему 'функция cd' не элегантна? – user123444555621

+0

Мне нравится ваше решение, выглядит чисто! – antonagestam

+0

[Подобный вопрос в Unix & Linux] (http://unix.stackexchange.com/questions/21363/execute-bash-scripts-on-entering-a-directory). Ваше решение такое же, как я бы использовал, я не понимаю, почему вы считаете его неэлегантным. – Gilles

ответ

10

Вы должны использовать DEBUG trap или PROMPT_COMMAND.

Примеры:

trap chpwd DEBUG  # calls the function before each command 

PROMPT_COMMAND=chpwd # calls the function after each command 

Обратите внимание, что функция, определенная в PROMPT_COMMAND выполняется до каждый подскажите, хотя, даже пустые.

+2

небольшой фрагмент примера был бы замечательным. –

+0

Кажется хорошим. +1 для фрагмента кода – marcio

+1

@marcioAlmada: Я добавил примеры. –

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