.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-вызов, что делают дотфайлы и как их использовать / настраивать, прочитайте это:

lhunath
источник
Ключевой отрывок: «заставляет его читать / 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