Я не такой строгий, но думаю, что это принадлежит 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так:
это должно работать на любом нормальном дистрибутиве с 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. Вы должны добавить код над этой строкой.
Спасибо друг! Это было то, что не работает для меня :)
Рэймонд Барлоу
Классный совет, роса. Я столкнулся с этой ловушкой при запуске сценариев от Дженкинса. Я вошел через SSH, и это сработало. Дженкинс вошел в систему не в интерактивном режиме, и это не удалось.
Кшиштоф Яблонский
1
Почему общее решение состоит в том, чтобы даже не устанавливать новый путь для неинтерактивных оболочек, мне не понятно. Там должно быть немного выше, если заявление, по этой причине. Похоже, что только псевдонимы и инициализация интерактивных инструментов должны идти ниже этой линии ...
BenPen
2
В других версиях Ubuntu интерактивная проверка выглядит следующим образом:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Сильвен
Спасибо, это решило это для меня. Жаль, что я видел это около часа назад!
Джастин Лоуренс
31
Чтобы получить превосходный ресурс о том, как работает bash-вызов, что делают дотфайлы и как их использовать / настраивать, прочитайте это:
Я думаю, что .profile загружает при входе в систему GUI. .bash_profile для терминальных входов.
Разек Луар
Это также работало для входа по SSH в контейнер докера Debian Jessie (с использованием контейнера только для данных для постоянного хранения) - НО вы также можете проверить / etc / passwd, чтобы проверить, что ваша оболочка входа - / bin / bash & not / bin / sh -------> / bin / dash
Стюарт Кардалл
1
@RazecLuar .profileдолжен выполняться любой оболочкой входа в систему, независимо от того, намерена ли указанная оболочка создавать графический интерфейс. Ваш комментарий полностью противоречит вопросу и этому ответу, которые ясно указывают на то, что .profileон вызывается в SSHing - явно не-GUI метод.
.bashrc
и.bash_profile
!Ответы:
.bashrc
не получен при входе по SSH. Вам нужно найти его.bash_profile
так:источник
.bashrc
по умолчанию он поставляется при входе по SSH..bashrc
из-из-коробки - но он делает это от.profile
не.bash_profile
.У меня была похожая ситуация, как у Хобхауса. Я хотел использовать команду
и 'some_command' существует в '/ var / some_location', поэтому я попытался добавить '/ var / some_location' в среду PATH, отредактировав '$ HOME / .bashrc'
но это не сработало. потому что по умолчанию .bashrc (Ubuntu 10.4 LTS) предотвращает получение кода, как показано ниже
так что если вы хотите изменить среду для не-логина оболочки SSH. Вы должны добавить код над этой строкой.
источник
bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Чтобы получить превосходный ресурс о том, как работает bash-вызов, что делают дотфайлы и как их использовать / настраивать, прочитайте это:
источник
Если решение аймана не работает, попробуйте присвоить файлу имя
.profile
вместо.bash_profile
. Это сработало для меня.источник
.profile
должен выполняться любой оболочкой входа в систему, независимо от того, намерена ли указанная оболочка создавать графический интерфейс. Ваш комментарий полностью противоречит вопросу и этому ответу, которые ясно указывают на то, что.profile
он вызывается в SSHing - явно не-GUI метод.