Назад | Перейти на главную страницу

Запуск программы удаленно с помощью SSH, но она не будет использовать мой .bashrc и ПУТЬ неверен

Я пытаюсь запустить команду удаленно с помощью SSH, но моя проблема в том, что когда я это делаю, мой .basrhc не запускается, и поэтому PATH неверен, и мой скрипт ломается.

Что я делаю

ssh www.remotehost.com 'моя_команда'

Я также пробовал такие вещи, как

ssh www.remotehost.com 'источник ~ / .bashrc; my_command 'и подобные варианты, но ничего не работает.

SSH с одним простым аргументом команды не запускает оболочку, что означает, что .bashrc не запускается.

SSH с составным аргументом команды, таким как ваш второй пример, должен запускать оболочку, но она будет неинтерактивной, поэтому по умолчанию .bashrc не запускается. Видеть Файлы запуска Bash в Руководство по Bash Чтобы получить больше информации.

Однако вызов 'source' во втором примере команды должен работать. Есть ли в вашем .bashrc строка вроде if [ "$PS1" ]; then или if [ -z "$PS1" ]; then на вершине? В примере bashrc есть одна из этих строк, и она предотвращает выполнение команд сценария, если вы не находитесь в интерактивной оболочке. Как упоминалось выше, SSH не запускает интерактивную оболочку по умолчанию, когда вы передаете аргумент команды. Пытаться ssh -t www.remotehost.com 'source ~/.bashrc; my_command', так как это приведет к выделению TTY и будет действовать как интерактивная оболочка.

Zancheys Post предлагает вам правильное решение.

An другой подход можно было бы предоставить простой сценарий оболочки, как показано ниже.

#!/bin/sh
# program name: /usr/local/bin/my_command_ssh
#
export PATH=/home/custom/bin:/usr/local/bin:/usr/bin:/bin
my_command

И теперь вы можете вызвать его по ssh:

ssh -p22 user@www.remotehost.com '/usr/local/bin/my_command_ssh'