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

Удаленное, интерактивное выполнение локального сценария bash с аргументами

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

Интерактивный (аргументы пытаются запускать как отдельную команду внутри или вне двойных кавычек)

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, вам следует изучить анзибль