Как принять пользовательский ввод в файл bash, который выполняется с помощью Plink? - PullRequest
2 голосов
/ 15 мая 2019

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

echo "Hello!"

read varname

echo "you entered " $varname

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

Сценарий может быть успешно выполнен с использованием PuTTY.

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

plink.exe -batch -i C: \ путь \ к \ key.ppk user @ host

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

cd mydir

bash myscript.sh

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

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

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

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

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

1 Ответ

2 голосов
/ 19 мая 2019

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

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

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