Судя по всему, что я тестировал, мне кажется, что невозможно выполнить локальный скрипт удаленно, разрешив интерактивную оболочку и передав аргументы.
Интерактивный (аргументы пытаются запускать как отдельную команду внутри или вне двойных кавычек)
ssh -t server "$(<${scriptname})"
Аргументы (Не интерактивный офс)
cat $scriptname | ssh -t server bash -s - "${args[@]}"
Я действительно пробовал это во всех смыслах. Можно ли одновременно запустить интерактивную оболочку и выполнить сценарий, одновременно отправляя аргументы?
Я полагаю, что ответил на свой вопрос, рассматривая возможность изменения значений аргументов $ @ на пульте дистанционного управления на те, которые были переданы локально, и, похоже, это работает в моих тестах.
Вот мое окончательное решение просто переключить 1 доллар на 2 доллара.
Локальный сценарий
#!/bin/bash
echo "I wanna read you $1 and $2"
read yn
if [ "$yn" == "y" ]; then
echo "I read you"
else
echo "I could not read you"
fi
Команда
ssh -t $server "set -- "${@:1:2}"; $(<${script})"
Результат (при отправке test1 и test2 в качестве аргументов)
I wanna read you test1 and test2
y
I read you!
Надеюсь, это поможет любым будущим посетителям
Как академический вопрос, я уверен, что если вы мастер экранирования оболочки и расширения параметров, вы могли бы это сделать. Хотя я бы не рекомендовал это.
На практике я делаю:
scp script.sh me @ server; ssh me @ server "./script.sh"
довольно часто.
Если вы хотите выполнять реальную работу удаленно по ssh, вам следует изучить анзибль