невозможно принять пользовательский ввод в perl

У меня странная проблема. Я написал сценарий, который в основном запускает сценарий perl на удаленном сервере с использованием ssh.

Этот скрипт работает нормально, но после завершения вышеуказанной операции он попросит пользователя выбрать следующую операцию.

он показывает параметры в командной строке, но пока я ввожу какой-либо ввод, он не отображается на экране даже после нажатия клавиши ввода, и он остается прежним.

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

OPERATION:
print "1: run the script in remote server \n2: Exit\n\nEnter your choice:";
my $input=<STDIN>;
chomp($input);
..........
sub run_script()
{
  my $com="sshg3.exe server -q --user=user --password=pass -exec script >/dev/null";
system("$com");

goto OPERATION;
}

после завершения этого сценария ssh он отображается на экране:

1: запустить удаленный скрипт 2: выйти

Введите свой выбор:

но пока я ввожу какой-либо ввод, он не отображается на экране до тех пор, пока я не выйду из него с помощью crtl C.

Помогите, пожалуйста, в чем тут может быть дело?


person raj    schedule 21.07.2015    source источник


Ответы (3)


Вы можете перенаправить вывод в командной строке, если опция -n для вас недоступна.

попробуйте этот, он может сработать для вас.

system("$com />null");
person Rajarshi    schedule 22.07.2015

Одна из классических проблем с ssh заключается в том, что он обычно работает в интерактивном режиме и поэтому по умолчанию подключает STDIN.

Это может привести к тому, что STDIN будет использоваться ssh, а не вашим скриптом.

Вместо этого попробуйте ssh -n.

person Sobrique    schedule 21.07.2015
comment
Спасибо за ваш ответ. но проблема в том, что для этого я использую сторонний SSH-модуль, поэтому для меня нет опции -n. есть ли другой способ остановить это? - person raj; 21.07.2015

Согласно https://support.ssh.com/manuals/client-user/62/sshg3.html есть возможность перенаправить ввод с помощью --dev-null (*nix) or --null (Windows).

-n, --dev-null (Unix), -n, --null (Windows)
Redirects input from /dev/null (Unix) and from NUL (Windows).
person chetangb    schedule 21.07.2015