.bashrc при вході в ssh


374

Коли я впадаю в свою скриньку ubuntu під управлінням Hardy 8.04, змінні середовища в моєму .bashrc не встановлюються.

Якщо я роблю джерело .bashrc, змінні правильно встановлено, і все добре.

Чому так .bashrcне запускається при вході?


92
Як на землі це "поза темою"?
Йона

8
Я не такий суворий, як це, але я гадаю, що це належить на сервері defaultfault, superuser.com або askubuntu.com
Майкл Батлер

16
@MichaelButler погодився. Цікаво, чому вони не переміщують її, а не просто закривають її ...
Люк

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

Я подумав, що це досить корисне питання. Зустрічався з цією проблемою, коли мені довелося запустити ssh у машину A, щоб перейти до машини B (доступно лише через локальну мережу A). Навчила мене практичної різниці між .bashrcі .bash_profile!
information_interchange

Відповіді:


620

.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.
підкреслюйте_d

75

У мене була подібна ситуація, як у Хобхаус. Я хотів використовувати команду

 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, і він працював. Дженкінс ввійшов неінтерактивно, і це не вдалося.
Krzysztof Jabłoński

1
Чому загальним рішенням є навіть не встановити новий шлях для неінтерактивних оболонок - поза мною. Повинно бути трохи вище, що якщо твердження, саме з цієї причини. Схоже, лише псевдоніми та ініціалізація інтерактивних інструментів повинні йти нижче цієї лінії ...
BenPen

2
На іншій версії Ubuntu інтерактивна перевірка виглядає так:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

Дякую, це вирішило це для мене. Бажаю, я бачив це близько години тому!
Джастін Лоуренс

31

Щоб отримати відмінний ресурс про те, як працює виклик bash, які dotfiles роблять для чого та як слід їх використовувати / налаштовувати, прочитайте це:


Ключовий уривок: "примушує його прочитати / etc / profile, а потім один з .bash_profile або .bash_login або .profile."
Енді Хейден

29

Якщо рішення Аймана не працює, спробуйте назвати ваш файл .profileзамість .bash_profile. Це працювало для мене.


2
Дивовижно. Я втратив 15 хвилин на цю деталь.
vmassuchetto

Це зробило трюк на Ubuntu 12.10
ThinkCode

1
я думаю .profile завантажується на вхід в GUI. .bash_profile його для входу в термінал.
Razec Luar

Це також працювало для входу в SSH до контейнера докера Debian Jessie (використовуючи лише контейнер даних для постійного зберігання) - Але ви також можете перевірити / etc / passwd, щоб перевірити, чи оболонка входу є / bin / bash & not / bin / sh -------> / bin / dash
Стюарт Кардалл

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