Когда я запускаю свою программу в интерактивном режиме, она работает нормально:
ssh somehost
$ ~/some/path/somescript.py
Когда я запускаю свою программу через ssh напрямую, она не работает. Переменная PYTHONPATH
не установлена, потому что .bashrc
не является источником.
ssh somehost ~/some/path/somescript.py
Если я бегу ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'
, все работает нормально.
Но последний не будет работать для некоторых других людей, например, используя tcsh и вообще не имея ~/.bashrc
).
Что команда для запуска вещей через SSH на другой хост , который работает для всех оболочек?
bash
ssh
environment-variables
remote
bzdjamboo
источник
источник
bash
, тогда него источников.bash_profile
или.profile
для интерактивного входа в систему , а также.bashrc
для неинтерактивного входа в систему . Если ваша оболочка входа в систему bash вызывается какsh
или ash или ksh, то она используется.profile
для интерактивного входа и ничего для неинтерактивного входа.Ответы:
Не существует стандартного файла для пользователя, который запускается для неинтерактивных входов в систему. Вам нужно либо сделать программу самодостаточной, чтобы она могла находить ее зависимости, не полагаясь на переменные среды, отличные от заданных по умолчанию, либо явно установить среду, обычно с помощью
Вы не должны устанавливать переменные окружения в
.bashrc
: этот файл предназначен для интерактивных оболочек и читается в каждом экземпляре bash. Должны быть установлены переменные среды.profile
, которые читаются при входе в систему. Помимо очень небольшого числа людей, которые не используют оболочку в стиле Борна в качестве оболочки входа в систему,.profile
она работает для всех, независимо от того, используют ли они bash или zsh или Csh или рыба в интерактивном режиме. Смотрите также разницу между .bashrc и .bash_profile , какие файлы настройки должны быть использованы для настройки переменных окружения с баш? ,Тем не менее, существует способ создания сценария каждый раз, когда вы входите через ssh с определенным ключом. См. Есть ли способ передать информацию конфигурации оболочки при SSHing на хост? , Запуск ш файлов через SSH .
источник
У меня была такая же проблема, но для меня решение было другим. Мой пользователь не был настроен на использование bash в качестве оболочки, вместо этого он использовал zsh в качестве оболочки, поэтому файлы bash dot не запускались при входе в систему. Откройте / etc / passwd в текстовом редакторе и найдите свое имя пользователя и используемую оболочку:
Вот так выглядит моя запись пользователя. Обратите внимание, что он говорит / bin / zsh вместо / bin / bash. Для zsh правильным точечным файлом является ~ / .zprofile. Его содержимое будет запускаться при каждом входе в систему с использованием ssh.
источник