Каждый раз, когда я захожу в SSH, мне приходится вручную загружать файл bashrc, чтобы установить переменные пути так, как я хочу. Как мне сделать, чтобы bash сделал это автоматически? Разве это не должно быть автоматически?
4 ответа
Существует файл ~/.profile
(или ~/.bash-profile
), который запускается при каждом входе в систему. Вы должны установить переменные окружения там (с помощью команды export
). И есть файл ~/.bashrc
, который запускается при открытии каждой продажи. Команды, которые не наследуются всем подоболочкам, например, псевдоним, могут быть установлены здесь (хотя для хорошей практики псевдонимы должны быть установлены в ~/.aliases
, который автоматически получается из ~/.bashrc
).
Если это не работает для вас, вы либо используете неправильное имя файла (пропускаете "." В начале?), Либо не используете bash в качестве оболочки. В последнем случае попробуйте passwd -s /bin/bash
(или chsh -s /bin/bash
, в зависимости от ОС) или вызовите SSH следующим образом:
ssh username@host bash`
Вы также должны знать о $ 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 не используется для поиска имени файла.
Уже есть несколько (возможно, правильных) ответов, но у меня была точно такая же проблема, и вот что сработало для меня:
добавьте в ~/.bash_profile
следующие строки:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Смотрите здесь и здесь для получения дополнительной информации.
(заметьте, в моем каталоге $ HOME у меня уже были следующие файлы:.bash_aliases
.bash_history
.bash_logout
.bash_profile
.bashrc
)
Я знаю, что это старый, но я думаю, что в новой оболочке входа в систему bash ищет один файл для запуска. Он ищет .bash_profile, затем .profile, затем .bashrc. Если он находит .bash_profile или .profile, он больше не ищет .bashrc.
Решение, вставьте в свой .profile:
[ -f $HOME/.bashrc ] && . $HOME/.bashrc