Как принять пользовательский ввод в файле bash, который выполняется с помощью Plink?

У меня есть простой скрипт bash:

echo "Hello!"

read varname

echo "you entered " $varname

Таким образом, он выводит «Привет!» а затем принимает пользовательский ввод и выводит введенный текст.

Скрипт можно успешно выполнить с помощью PuTTY.

Также я могу запустить скрипт с помощью Plink через Windows cmd. Подключаюсь к хосту:

plink.exe -batch -i C:\path\to\key.ppk пользователь@хост

Затем я меняю каталог и запускаю скрипт:

cd mydir

bash myscript.sh

Скрипт работает как надо: печатает "Hello!" а затем запросить ввод и распечатать ввод.

Однако, если я запускаю скрипт с той же строкой с подключением Plink:

plink.exe -batch -i C:\path\to\key.ppk user@host bash ./mydir/myscript.sh

Я получаю следующую ошибку: я вижу "Hello!" вывод и курсор мигает на следующей строке. Но я не могу ввести там ни одного символа. Консоль просто не реагирует ни на какие клавиши и даже на Enter. Единственный способ продолжить — нажать Ctrl+C, чтобы закрыть соединение.

Итак, как решить эту проблему и заставить скрипт принимать ввод с помощью cmd + Plink, если скрипт выполняется с использованием одной строки?


person Sergey Kravchenko    schedule 15.05.2019    source источник


Ответы (1)


Когда вы указываете команду в командной строке Plink, она выполняется в неинтерактивном сеансе (без эмуляции терминала).

Используйте -t переключатель, чтобы принудительно использование интерактивного сеанса (эмуляция терминала):

plink.exe -batch -t -i C:\path\to\key.ppk user@host bash ./mydir/myscript.sh
person Martin Prikryl    schedule 19.05.2019