dot файл не получен при запуске команды через ssh

Когда я запускаю свою программу в интерактивном режиме, она отлично работает:

ssh somehost $ ~/some/path/somescript.py 

Когда я запускаю свою программу поверх ssh напрямую, она не работает. Переменная PYTHONPATH не установлена, потому что .bashrc не используется.

 ssh somehost ~/some/path/somescript.py 

Если я запустил ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py' ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py' , он работает нормально.

Но последний не будет работать для некоторых других людей, например, с использованием tcsh и вообще не иметь ~/.bashrc ).

Какая команда запускать вещь через ssh на другом хосте, который работает для всех оболочек?

  • Хорошая практика использования одной и той же пары ключей SSH на нескольких машинах?
  • Bash: интерактивное дистанционное приглашение
  • Отключить учетную запись PAM, но сохранить ландшафт-sysinfo y motd
  • X11 пересылка Amazon EC2 значение порядкового номера в переменной DISPLAY
  • Постоянный SSH-порт без открытых ключей
  • Пусть передача выполняется на сервере, независимо от сеанса SSH
  • vnc через назначение порта ssh
  • Логин ssh passwordless не работает на RHEL
  • 2 Solutions collect form web for “dot файл не получен при запуске команды через ssh”

    Нет стандартного файла для каждого пользователя, который запускается для не-интерактивных логинов. Вам нужно либо сделать программу автономной, чтобы она могла находить свои зависимости, не полагаясь на переменные среды, отличные от параметров по умолчанию, либо явно задавать среду, как правило, с помощью

     ssh somehost '. ~/.profile; exec ~/some/path/somescript.py' 

    Вы не должны устанавливать переменные среды в .bashrc : этот файл предназначен для интерактивных оболочек и читается в каждом экземпляре bash. Переменные среды должны быть установлены в .profile , который считывается при входе в систему. Помимо очень небольшого числа людей, которые не используют оболочку стиля Bourne в качестве своей оболочки входа, .profile действительно работает для всех, независимо от того, используют ли они bash или zsh или csh или рыбы в интерактивном режиме. См. Также Разница между .bashrc и .bash_profile , какие файлы установки следует использовать для настройки переменных среды с помощью bash? ,

    При этом существует возможность генерировать сценарий каждый раз, когда вы входите в ssh с определенным ключом. См. Есть ли способ передать информацию о конфигурации оболочки при SSHing на хост? , sh загрузочных файлов по ssh .

    У меня была та же проблема, но для меня решение было другим. Мой пользователь не был настроен на использование bash в качестве оболочки, вместо этого вместо него использовался zsh как shell, поэтому файлы bash dot не запускались при входе в систему. Откройте / etc / passwd с помощью текстового редактора и найдите свое имя пользователя и какую оболочку он использует:

     root:x:0:0:root:/root:/bin/zsh 

    Так выглядит моя пользовательская запись. Обратите внимание, что это говорит / bin / zsh вместо / bin / bash. Для zsh правильный точечный файл ~ / .zprofile. Его содержимое будет запускаться каждый раз при входе в систему с помощью ssh.

    Interesting Posts

    Как отсортировать файл по столбцу, представляющему собой сочетание цифр, букв и знаков препинания?

    Как Kernel 4.0 может повредить систему?

    Установка жесткого диска USB 2.0 с несколькими разделами (GPT / HFS +) на Debian

    Как изменить раздел подкачки от первичного к логическому?

    как файл / proc / net / dev заполнен?

    Создание скрипта, который запускает простую команду для всех файлов в каталоге

    rsync, удалите файлы на стороне получателя, которые были удалены на стороне отправки. (Но не удаляйте все)

    Обновлять глобальные админы firefox автоматически

    Как избежать пробелов при использовании вывода команды в командной строке

    Oh-My-Zsh удаляет дублированный путь в стеке каталогов

    Как вывести отступ grep?

    Есть ли причина уйти от fstab в системе systemd?

    Заполнение между выпадающими меню / панелями инструментов

    Возможно ли сделать загрузку системы, если systemd-networkd не удается?

    Линукс systemd выключение прерывания, если служба активна

    Linux и Unix - лучшая ОС в мире.