У меня есть два местный файлы, один config.sh
который содержит определения переменных, другой script.sh
который содержит сценарий bash.
Локально я могу:
source config.sh; bash script.sh
Я ищу то же самое через ssh, пока у меня это работает:
ssh user@host 'bash -s' < script.sh
Но я не уверен, стоит ли мне использовать cat
или некоторые входные трубы <(...)
чтобы выполнить как config.sh, так и script.sh.
Каким будет лучший и чистый способ выполнения нескольких команд, требующих передачи некоторого содержимого по каналу ssh?
Предполагая, что оба сценария находятся на локальном хосте, а не на удаленном хосте:
cat config.sh script.sh | ssh -T remote_host bash
Вы можете использовать флаг '-t', если вместо этого вы хотите принудительно выделить псевдо-TTY на удаленном конце. У локального процесса SSH его не будет, так как стандартный ввод из канала. Вам нужно только добавить строку "bash
"до конца командной строки, если это не оболочка по умолчанию на удаленном конце. Также обратите внимание, что ваш исходный код не будет работать, если ваши" определения переменных "не экспортируют соответствующие переменные среды.
Используйте EXPECT для запуска ваших скриптов с вашего удаленного компьютера, таким образом ваши скрипты выполняются так, как если бы они были на вашем локальном компьютере. Вот краткая демонстрация того, как использовать EXPECT.