5

Я обнаружил, что все терминалы открыты одновременно. Когда я обновляю свой .bashrc, мне нужно перейти на каждый терминал и выполнить

. .bashrc

снабдить терминал новым .bashrc.

Это отчасти боль, а также отнимает много времени. Мне было интересно, есть ли способ получить все открытые терминалы с новым файлом .bashrc, не переходя на каждый из них, не выходя из системы и не перезапускаясь?

3 ответа3

6

Подход terdon хорошо работает при правильных обстоятельствах, но если, например, .bashrc присоединяется к переменной PATH , это вызовет ошибки довольно быстро.

Вместо того, чтобы просто выделять файл, вы можете сначала проверить время его изменения и сравнить его с mtime последней версии.

Для этого добавьте это в ~/.bashrc:

  • Linux

    bashrc_sourced=$(stat -c %Y ~/.bashrc)
    
    PROMPT_COMMAND='
        test $(stat -c %Y ~/.bashrc) -ne $bashrc_sourced && source ~/.bashrc
    '
    
  • OS X и BSD

    bashrc_sourced=$(stat -f %m ~/.bashrc)
    
    PROMPT_COMMAND='
        test $(stat -f %m ~/.bashrc) -ne $bashrc_sourced && source ~/.bashrc
    '
    

Тогда, ресурс это вручную один последний раз.

2

В общем, не забудьте указать свою операционную систему, правильный ответ часто зависит от системы. Помните, что bash используется по умолчанию в большинстве Linux, OS X и многих UNIX.

В любом случае, в вашем случае ОС не имеет значения, поэтому вам нужно установить переменную PROMPT_COMMAND :

Bash предоставляет переменную среды PROMPT_COMMAND. Содержимое этой переменной выполняется как обычная команда Bash непосредственно перед тем, как Bash отображает приглашение.

Итак, поскольку команда, которую вы хотите выполнить, это sourcing ~/.bashrc , добавьте эту строку в ваш ~/.bashrc (. Просто псевдоним source):

PROMPT_COMMAND='source ~/.bashrc'

Теперь каждый раз, когда Bash отображает подсказку, он сначала перечитывает ~/.bashrc . Чтобы получить открытые терминалы (если они были открыты после установки PROMPT_COMMAND) для обновления, просто запустите любую команду или просто нажмите Enter .

ВНИМАНИЕ: В зависимости от сложности вашего ~/.bashrc , это может добавить заметное отставание, так как любые команды в файле будут выполняться неоднократно.

0

ПОЦЕЛУЙ

Поместите один или оба из них в один или оба из /etc/profile и ~/.bashrc

alias sProf='source /etc/profile'
alias sBrc='source ~/.bashrc'

другой подход:

Скопируйте строку терминала, включая все, что находится между стрелками, чтобы включить команду и символ новой строки, и нажмите среднюю кнопку мыши на каждом терминале.

  <---------------------------->
$ source ~/.bashrc             | terminal border

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