Как мне заставить экран GNU читать изменения .bash_profile / .bash_rc?

После того, как я внесу изменения в .bash_rc или .bash_profile, когда я запускаю экран GNU, он не распознает эти изменения. Я могу

source ~/.bash_profile

и он работает для текущего открытого окна экрана, но я должен делать это для каждого открытого окна экрана.

Как получить экран, на котором отображаются последние изменения в моей конфигурации bash?


person Francis Lewis    schedule 04.08.2011    source источник
comment
Как насчет того, чтобы заменить принятый ответ Майком на другой (правильный)?   -  person dotz    schedule 01.02.2017
comment
На самом деле, принятый ответ от gpojd - хороший. Это очень полезно, если вы находитесь на сервере как root, чтобы иметь возможность делать ctrl-a : at "#" stuff "source .gn/bashrc^M" и запускать ваш личный root bashrc (unalias rm cp mv для начала) и иметь все ваши исходные файлы Windows в персонализированном rc-файле. Примечание ^ M - это два символа каретки и M.   -  person Graham Nicholls    schedule 01.02.2021


Ответы (2)


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

Судя по всему, вы можете отправить команду сразу во все окна, используя этот синтаксис:

C-a :
at "#" stuff "source ~/.bash_profile^M"
person gpojd    schedule 04.08.2011
comment
Мне удалось получить .bash_profile для всех окон открытого экрана, но он не работает ни для каких новых окон экрана, которые я открываю. Он также не загружает все новые данные .bash_profile, когда я запускаю новый сеанс экрана. - person Francis Lewis; 04.08.2011
comment
Не знаю, зачем я это поставил. .bash_profile создается только при первом входе в систему. .bashrc выполняется каждый раз, когда открывается оболочка. Если вам нужно, чтобы это происходило каждый раз, я предлагаю вам вносить изменения в .bashrc, а не .bash_profile. - person gpojd; 04.08.2011
comment
Это сработало отлично! Большое спасибо! Я все еще мог подумать, что размещение материала в .bash_profile будет загружено, когда я вошел в систему, но это тоже не тот случай. - person Francis Lewis; 04.08.2011
comment
Что ж, он загружен в вашу оболочку входа в систему, но если screen был запущен до того, как вы внесли изменения, он не вступит в силу, если вы полностью не закроете screen и не запустите новый [из новой оболочки входа в систему]. - person Random832; 04.08.2011
comment
У меня был огромный .bash_profile, и этот создал проблему для моего WinSCP (и, вероятно, Filezilla). Следует использовать решение, указанное ниже @mike. (shell -$SHELL в ~/.screenrc) - person laggingreflex; 21.01.2015

Если вы хотите, чтобы screen всегда обрабатывал вашу оболочку как оболочку входа в систему и исходил из тех же файлов, которые были бы прочитаны при обычном запуске новой оболочки, добавьте следующее в ~/.screenrc (или, возможно, ~/.byobu/.screenrc, как указано в комментарии):

shell -$SHELL

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

Документацию для этого (и множество других деталей экрана) можно найти здесь < / а>. По сути, shell - это команда для вывода на экран, сообщающая ему, что нужно запустить следующее, когда ему нужно создать новую оболочку. $SHELL - это обычная переменная, содержащая путь к предпочитаемой оболочке. И прочерк - перед $SHELL указывает на то, что он должен запускаться как оболочка входа в систему (что обычно означает, что она является источником вашего ~/.bash_profile и т. Д.).

Однако стоит отметить, что по умолчанию screen просто наследует большинство переменных среды от оболочки, с которой вы запускаете screen; и вспомогательная оболочка входа в систему может неожиданным образом изменить некоторые переменные среды. Я столкнулся с ситуацией, когда элементы моего $ PATH были в основном переставлены. Я решил проблему благодаря этому особенно отличному ответу о суперпользователе.

Вы можете заметить доступную команду source. Важно отметить, что это источник файла screen команд, а не команд оболочки. Другие соответствующие (экранные) команды включают eval и _ 12_.

person Mike    schedule 06.12.2013
comment
В моем случае .screenrc, который требовал редактирования, находился в .byobu / .screenrc. RHEL6 - person Scott Rowley; 25.02.2015