Я установил свое собственное приложение в качестве оболочки пользователя на удаленном хосте. Мое приложение читает из стандартного ввода и выводит вывод на стандартный вывод.
Если я сделаю ssh user@remotehost.com
и введу несколько строк текста, приложение будет работать как положено.
Однако, если я сделаю это:
ssh user@remotehost.com < file.txt
Тогда мой инструмент обрабатывает только первую строку, а затем завершает работу.
Есть какие-нибудь подсказки?
Я подозревал бы Ваше приложение. Это пытается записать STDERR
и перестало работать? Это регистрирует что-нибудь? Как это буферизует свой вход? (Если ответ нисколько не, то остальная часть Вашего входа прибывает, в то время как приложение не слушает). Какая система является "удаленным хостом"?
Это работает на меня:
walt@bat:~(0)$ seq 1 4 >14.txt; ssh localhost <14.txt
Pseudo-terminal will not be allocated because stdin is not a terminal.
walt@localhost's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-58-generic x86_64)
-bash: line 1: 1: command not found
-bash: line 2: 2: command not found
-bash: line 3: 3: command not found
-bash: line 4: 4: command not found
, Возможно, Вы могли использовать expect
, или один из его вариантов:
walt@bat:~(127)$ apt-cache search expect | grep -w expect
empty-expect - Run processes and applications under pseudo-terminal
expect - Automates interactive applications
expect-lite - quick and easy command line automation tool
libjs-expect.js - behavior driven test assertions - JavaScript library
libnet-scp-expect-perl - Wrapper for scp to send passwords via Expect
libtest-expect-perl - module for automated driving and testing of terminal-based programs
node-expect.js - behavior driven test assertions - Node.js module
tcl-expect - Automates interactive applications (Tcl package)
tcl-expect-dev - Automates interactive applications (development)