.bashrc при входе в систему через ssh


375

Когда я захожу в свой ubuntu-box под управлением Hardy 8.04, переменные окружения у меня .bashrcне устанавливаются.

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

Почему .bashrcне работает при входе в систему?


92
Как же это "не по теме"?
Иона

8
Я не такой строгий, но думаю, что это принадлежит serverfault.com, superuser.com или askubuntu.com
Майкл Батлер

16
@MichaelButler Согласен. Интересно, почему они не перемещают это вместо того, чтобы просто закрыть это ...
Люк

4
@Luc - Вопросы можно перемещать только в течение 60 дней с момента их создания. Этот вопрос не был закрыт как не по теме до тех пор, пока он не был создан через 3 с половиной года. Я считаю, что правило 60 дней имеет какое-то отношение к тому, когда резервные копии баз данных или что-то в этом роде ... становится труднее выполнить миграцию после того, как произойдет резервное копирование.
ArtOfWarfare,

Я думал, что это был довольно полезный вопрос. Обнаружил эту проблему, когда мне пришлось ssh на машину A, чтобы ssh на машину B (доступ только через локальную сеть A). Научил меня практической разнице между .bashrcи .bash_profile!
информацией

Ответы:


621

.bashrcне получен при входе по SSH. Вам нужно найти его .bash_profileтак:

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

32
это должно работать на любом нормальном дистрибутиве с Bash, поэтому все эти комментарии устарели :)

1
Это не обязательно для сервера Ubuntu 12.04 LTS, поскольку .bashrcпо умолчанию он поставляется при входе по SSH.
Орокусаки

4
@orokusaki: Исправление, это так :) Был неестественный файл .bash_profile, который заставлял .profile быть пропущенным.
Лестер Пибоди

4
Как и @LesterPeabody, мой .bashrc не был получен на сервере Ubuntu 12.04 LTS из-за мошеннического .bash_profile. Он был создан установкой RVM. Я переместил команду RVM в .profile и удалил .bash_profile. Теперь все в порядке.
Род Дауноравичюс

4
FWIW Debian Jessie / 8 уже источников .bashrcиз-из-коробки - но он делает это от .profileне .bash_profile.
underscore_d

76

У меня была похожая ситуация, как у Хобхауса. Я хотел использовать команду

 ssh myhost.com 'some_command'

и 'some_command' существует в '/ var / some_location', поэтому я попытался добавить '/ var / some_location' в среду PATH, отредактировав '$ HOME / .bashrc'

но это не сработало. потому что по умолчанию .bashrc (Ubuntu 10.4 LTS) предотвращает получение кода, как показано ниже

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

так что если вы хотите изменить среду для не-логина оболочки SSH. Вы должны добавить код над этой строкой.


7
Спасибо друг! Это было то, что не работает для меня :)
Рэймонд Барлоу

Классный совет, роса. Я столкнулся с этой ловушкой при запуске сценариев от Дженкинса. Я вошел через SSH, и это сработало. Дженкинс вошел в систему не в интерактивном режиме, и это не удалось.
Кшиштоф Яблонский

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

2
В других версиях Ubuntu интерактивная проверка выглядит следующим образом:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Сильвен

Спасибо, это решило это для меня. Жаль, что я видел это около часа назад!
Джастин Лоуренс

31

Чтобы получить превосходный ресурс о том, как работает bash-вызов, что делают дотфайлы и как их использовать / настраивать, прочитайте это:


Ключевой отрывок: «заставляет его читать / etc / profile, а затем один из .bash_profile или .bash_login или .profile».
Энди Хейден

29

Если решение аймана не работает, попробуйте присвоить файлу имя .profileвместо .bash_profile. Это сработало для меня.


2
Потрясающие. Я потерял 15 минут на этой детали.
vmassuchetto


1
Я думаю, что .profile загружает при входе в систему GUI. .bash_profile для терминальных входов.
Разек Луар

Это также работало для входа по SSH в контейнер докера Debian Jessie (с использованием контейнера только для данных для постоянного хранения) - НО вы также можете проверить / etc / passwd, чтобы проверить, что ваша оболочка входа - / bin / bash & not / bin / sh -------> / bin / dash
Стюарт Кардалл

1
@RazecLuar .profileдолжен выполняться любой оболочкой входа в систему, независимо от того, намерена ли указанная оболочка создавать графический интерфейс. Ваш комментарий полностью противоречит вопросу и этому ответу, которые ясно указывают на то, что .profileон вызывается в SSHing - явно не-GUI метод.
underscore_d
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.