Поэтому я пытаюсь запустить сценарий удаленно на ssh, например ssh remote "~/bin/some_script.sh" однако проблема в том, что сценарий запускает команду vcs которая, кажется, не загружается, когда я пытаюсь просто отправить команду через ssh, в отличие от ssh'ing в удаленном и ручного выполнения команды.

Для ясности следующий вывод появляется при попытке

$ ssh remote "cd/...; vcs -x -...;"
bash: vcs: command not found

но это работает, когда я делаю

$ ssh remote
remote$ vcs -x -...
remote$ //good output

Я посмотрел больше в это, и когда я просто бегу

$ ssh remote "compgen -c | wc -l"
2611

против

$ ssh remote
remote$ compgen -c | wc -l
3735

Очевидно, что многие команды не "загружаются", когда я просто передаю команды через ssh и vs, когда на самом деле выполняю команды ssh и выполняю команды. Есть идеи, что происходит и как это преодолеть?

2 ответа2

1

Запуск ssh remote "command" открывает неинтерактивную оболочку, поэтому при открытии он не получает исходные файлы. Я покопался глубже и обнаружил, что в $PATH не хватает некоторых /bins когда они запускаются не в интерактивном режиме. Мое решение состоит в том, чтобы получить исходную папку при запуске скрипта ssh remote "~/bin/some_script.sh"

#!/bin/bash
. /etc/.../sourced_script.sh
# script

Единственным недостатком является то, что вы должны помнить, чтобы этот сценарий использовался в каждом сценарии, который вы хотите запустить удаленно. Возможно, есть более элегантное решение, где вы можете добавить это . /etc/.../sourced_script.sh в сценарий запуска для неинтерактивных оболочек, но мой опыт работы с n00b не знает, существуют ли сценарии запуска для неинтерактивных оболочек.

0

Об этом много раз спрашивали и отвечали, в том числе:

и много других. Я думаю, что первый - лучший ответ, который я нашел за несколько секунд поиска

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .