Я пытаюсь запустить команду удаленно с помощью 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'