7

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

4 ответа4

5

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

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

ssh username@host bash`
3

Вы также должны знать о $ 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

Уже есть несколько (возможно, правильных) ответов, но у меня была точно такая же проблема, и вот что сработало для меня:

добавьте в ~/.bash_profile следующие строки:

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

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

(заметьте, в моем каталоге $ HOME у меня уже были следующие файлы:.bash_aliases .bash_history .bash_logout .bash_profile .bashrc)

1

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

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

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

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