Как мне навсегда установить изменения в Bashrc?

5561

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

7
Это должно быть `~ / .bashrc`? Вероятно, для PATH я поместил бы это в `~ / .bash_profile`. В любом случае, точка необходима. mpez0 14 лет назад 4

4 ответа на вопрос

5
petersohn

Существует ~/.profile(или ~/.bash-profile) файл, который запускается при каждом входе в систему. Вы должны установить переменные окружения там (с помощью exportкоманды). И есть ~/.bashrcфайл, который запускается при открытии каждой продажи. Команды, которые не наследуются всем подоболочкам, например, псевдоним, могут быть установлены здесь (хотя для хорошей практики должны быть установлены псевдонимы ~/.aliases, которые автоматически получаются ~/.bashrc).

Если это не работает для вас, вы либо используете неправильное имя файла (пропускаете "." В начале?), Либо не используете bash в качестве оболочки. В последнем случае попробуйте passwd -s /bin/bash(или chsh -s /bin/bash, в зависимости от ОС) или вызовите SSH следующим образом: 

ssh username@host bash` 
Там должна быть точка: `~ / .bashrc` (вы даже упоминаете, что в OP может отсутствовать точка!). Кроме того, `~ / .aliases` или` ~ / .bash_aliases` не * автоматически * получены автоматически. В `~ / .bashrc` должны быть инструкции, чтобы * явно * сделать это. Dennis Williamson 14 лет назад 3
Я думаю, что вы имели в виду `~ / .bash_profile` с подчеркиванием, а не дефисом. Cristian Ciupitu 10 лет назад 0
3
Marnix A. van Ammers

Вы также должны знать о $ BASH_ENV.

Какие файлы читаются bash при запуске, зависит от того, является ли сеанс интерактивным или нет. Иногда может возникнуть проблема, когда неясно, является ли сеанс интерактивным. Поэтому, кроме ~ / .bashrc, вы можете также экспортировать и установить переменную BASH_ENV, чтобы она указала на файл, содержащий PATH и другие необходимые вам настройки. BASH_ENV можно установить так, чтобы он указывал на ваш файл .bashrc (иногда это .bash_rc), если там нет интерактивных команд (для безопасности используйте отдельный файл, скажем, ~ / .bash_env). Из страниц руководства bash:


Когда запускается интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из ~ / .bashrc, если этот файл существует. Это может быть запрещено с помощью параметра --norc. Опция --rcfile file заставит bash читать и выполнять команды из файла вместо ~ / .bashrc.

Когда bash запускается неинтерактивно, например, для запуска сценария оболочки он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения., Bash ведет себя так, как будто была выполнена следующая команда:

 if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 

но значение переменной PATH не используется для поиска имени файла.


1
Rich Homolka

Я знаю, что это старый, но я думаю, что в новой оболочке входа в систему bash ищет один файл для запуска. Он ищет .bash_profile, затем .profile, затем .bashrc. Если он находит .bash_profile или .profile, он больше не ищет .bashrc.

Решение, вставьте в свой .profile:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc 
1
hoosierEE

There are already several (probably correct) answers but I had this exact same problem and this is what worked for me:

add to ~/.bash_profile the following lines:

if [ -f ~/.bashrc ]; then source ~/.bashrc fi 

See here and here for more info.

(note, in my $HOME directory I already had the following files: .bash_aliases .bash_history .bash_logout .bash_profile .bashrc)

`bash` не будет искать` ~ / .bashrc`, если есть `~ / .bash_profile`. Blacklight Shining 10 лет назад 0