Выполните функцию удара после ввода каталога

Я хотел бы выполнить конкретную функцию удара, когда я ввожу новый каталог. Somethink как:

alias cd="cd $@ && myfunction"

$@ не работает там, и добавление, что обратная косая черта не помогает. Я также немного волнуюсь по поводу питания с CD, и было бы хорошо, если бы это работало на другие команды, которые изменили каталог, как pushd и popd.

Какие-либо лучшие псевдонимы/команды?

19
задан Paul Biggar 29 July 2010 в 08:44
поделиться

3 ответа

Самое простое решение, которое я могу придумать, - это

myfunction() {
  if [ "$PWD" != "$MYOLDPWD" ]; then
    MYOLDPWD="$PWD";
    # strut yer stuff here..
  fi
}

export PROMPT_COMMAND=myfunction

Это должно сработать. Он будет работать со всеми командами и сработает до отображения подсказки.

19
ответ дан 30 November 2019 в 02:41
поделиться

Я написал сценарий ZSH, использующий функцию обратного вызова chpwd для исходных конфигураций ZSH проекта. Я не уверен, работает ли это с Bash, но я думаю, что стоит попробовать. Если он не найдет файл сценария в каталоге, в который вы переходите, он будет проверять родительские каталоги, пока не найдет сценарий для источника (или пока он не достигнет / ). Он также вызывает функцию unmagic при выходе из каталога cd'ом, которая позволяет вам очистить среду при выходе из проекта.

http://github.com/jkramer/home/blob/master/.zsh/func/magic

Пример «волшебного» сценария:

export BASE=$PWD # needed for another script of mine that allows you to cd into the projects base directory by pressing ^b

ctags -R --languages=Perl $PWD # update ctags file when entering the project directory

export PERL5LIB="$BASE/lib"

# function that starts the catalyst server
function srv {
  perl $BASE/script/${PROJECT_NAME}_server.pl
}

# clean up
function unmagic {
  unfunction src
  unset PERL5LIB
}
2
ответ дан 30 November 2019 в 02:41
поделиться

Псевдонимы не принимают параметры. Вы должны использовать функцию. Нет необходимости выполнять ее автоматически каждый раз, когда выдается приглашение.

function cd () { builtin cd "$@" && myfunction; }

Ключевое слово builtin позволяет переопределить встроенный модуль Bash без создания рекурсии. Кавычки в параметре позволяют использовать его в случае наличия пробелов в именах каталогов.

В документации по Bash говорится:

Почти для всех целей функции оболочки предпочтительнее псевдонимов.

21
ответ дан 30 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: