Когда я вхожу в свой ArchLinux сервер и введите:
$echo $PATH
I get...
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl
Но когда я НЕ вошел в систему и попробую:
ssh myyser@mysever 'echo $PATH'
i get..
/usr/bin:/bin:/usr/sbin:/sbin
ПУТЬ верен в моем / etc / profile, но ssh, похоже, не загружает его.
Есть ли способ исправить это для всех пользователей / сеансов ssh?
Этого не происходит, когда я использую ubuntu
Публикация здесь по предложению Евгений Маевский 'EldoS Corp
Я исправил эту проблему, добавив путь в / etc / окружающая среда
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl
Не знаю, хорошая ли это практика, но работает.
Спасибо!
Когда вы запускаете команду через ssh
, он не запускает оболочку входа на удаленном хосте. Практические последствия этого различаются, но обычно это означает, что запускаемые файлы инициализации оболочки при входе в систему будут проигнорированы. С другой стороны, файлы инициализации оболочки, которые будут обрабатываться для каждого экземпляра оболочки.
Если вы используете bash
, это означает, что только ваш .bashrc
файл используется. Я часто кладу что-то подобное в свой .bashrc
файл:
if [ ! "$RAN_PROFILE" ]; then
. $HOME/.profile
fi
И внизу моей .profile
:
RAN_PROFILE=1
export RAN_PROFILE
Это гарантирует, что я получу .profile
сервисы даже для оболочек без входа в систему.
Если вы используете Bash в качестве оболочки по умолчанию для пользователя, ваш ssh
команда запускает неинтерактивную оболочку без входа в систему, поэтому она не обрабатывает /etc/profile
. Вам нужно будет указать этот файл в своем сценарии.
Оболочка вашего клиента расширяет переменную PATH, поэтому вам нужно избегать знака доллара.
foo$ ssh username@bar.example.com 'echo \ $ PATH'