Я пользователь zsh, но это должно относиться к любой оболочке в теории. Когда я редактирую свой .zshrc
чтобы добавить новый псевдоним, я должен использовать source ~/.zshrc
во всех моих открытых вкладках / окнах терминала, чтобы иметь возможность использовать новый псевдоним. Мне интересно, есть ли способ, чтобы мои открытые оболочки периодически отправляли мой профиль автоматически.
3 ответа
Наиболее сложное и наиболее эффективное решение в реальном времени - написать пользовательскую функцию-ловушку в .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
Как насчет псевдонимов команды, которую вы регулярно используете?
Возможно, вам придется адаптировать это для Zsh:
myvi() {
vi $1
source ~/.zshrc
}
alias vi=myvi
Так что, когда вы vi
- нибудь, это будет источник ~/.zshrc
Вы можете сделать это, например, с помощью cd или ls.
Обновить
Другой вариант - встроить его в ваше приглашение:
export PS1="\$(source ~\.zshrc)\u@\h:\w\$"
Вы абсолютно правы, эта функция может быть построена в любой оболочке, и так уже более четверти века.
Это не так, и с моей точки зрения вот почему. Такая функция может привести к фатальному завершению работы всех оболочек в случае малейшей ошибки. Пример: у вас есть раздел кода для отладки, который содержит
exit 0
и во время сеанса редактирования вашего .zshrc
вы удалили код, защищающий этот выход, чтобы сделать его общим правилом.
Все ваши работающие zsh
закончатся.
Вы не сможете запустить еще один с тем же идентификатором пользователя, чтобы исправить ваш .zshrc
.
Вам придется использовать другую учетную запись, для которой разрешено использование sudo
.zshrc
.
Тогда лучше всего всегда проверять .zshrc
во вновь созданной оболочке, чтобы выжить.
Эта недостающая функция очень мудрая.