4

Я пользователь zsh, но это должно относиться к любой оболочке в теории. Когда я редактирую свой .zshrc чтобы добавить новый псевдоним, я должен использовать source ~/.zshrc во всех моих открытых вкладках / окнах терминала, чтобы иметь возможность использовать новый псевдоним. Мне интересно, есть ли способ, чтобы мои открытые оболочки периодически отправляли мой профиль автоматически.

3 ответа3

2

Наиболее сложное и наиболее эффективное решение в реальном времени - написать пользовательскую функцию-ловушку в .zshrc которая при перехваченном сигнале генерирует сам .zshrc .

Как это:

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df'

В zsh это можно увидеть сейчас:

zshsession> alias
which-command=whence
xxx=df

Теперь некоторые изменения в .zshrc

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df -g'
alias yyy='someothercommand'

Здесь начинается сложная часть. Используя просмотр inotify .zshrc или скрипт-наблюдатель, который проверяет последнюю модификацию .zshrc , запускается команда, которая отправляет сигнал USR1 всем процессам zsh пользователя. Теперь я просто запустил его в другой оболочке:

~$ ps -a | awk '$4=="zsh" {print $1}' | xargs kill -SIGUSR1

И результат:

zshsession> alias
which-command=whence
xxx='df -g'
yyy=someothercommand
1

Как насчет псевдонимов команды, которую вы регулярно используете?

Возможно, вам придется адаптировать это для Zsh:

myvi() {

    vi $1 
    source ~/.zshrc
}

alias vi=myvi

Так что, когда вы vi - нибудь, это будет источник ~/.zshrc

Вы можете сделать это, например, с помощью cd или ls.

Обновить

Другой вариант - встроить его в ваше приглашение:

export PS1="\$(source ~\.zshrc)\u@\h:\w\$"
0

Вы абсолютно правы, эта функция может быть построена в любой оболочке, и так уже более четверти века.

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

exit 0

и во время сеанса редактирования вашего .zshrc вы удалили код, защищающий этот выход, чтобы сделать его общим правилом. Все ваши работающие zsh закончатся. Вы не сможете запустить еще один с тем же идентификатором пользователя, чтобы исправить ваш .zshrc . Вам придется использовать другую учетную запись, для которой разрешено использование sudo .zshrc .

Тогда лучше всего всегда проверять .zshrc во вновь созданной оболочке, чтобы выжить.

Эта недостающая функция очень мудрая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .