обновил мой ответ и все работает!

хотел перенаправить ввод в jshell, используя функцию ожидаемого, чтобы я мог имитировать ввод текста в записанных демонстрациях. Но хотя я могу порождать процесс jshell из ожидаемого сценария, который также может распознавать приглашение jshell, после этого ничего не работает. ожидайте вывод, что выглядит как последовательность управления, как^[[24;9Rи я не вижу выходных данных из jshell. Различные типы терминалов создают разные последовательности символов, но ни один из них не работает. Это поведение согласуется с ожидаемым на Ubuntu и Mac OS. Любые предложения о том, как исследовать эту проблему, будут приветствоваться.expect -d не помогает

Вот расшифровка сессии jshell, которую я хочу смоделировать

$ jshell
|  Welcome to JShell -- Version 9.0.1
|  For an introduction type: /help intro

jshell> 3
$1 ==> 3

jshell> 

и вот сценарий, который я думаю, должен сделать это:

#!/usr/bin/expect -f
spawn jshell
expect jshell>
send "3\r"
expect jshell>

Когда я запускаю этот скрипт (в Mac OS 10.11.6, но я получаю очень похожие результаты в Ubuntu), я вижу этот вывод

spawn jshell
|  Welcome to JShell -- Version 9.0.1
|  For an introduction type: /help intro

jshell> ^[[24;9R

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

Добавление-d на флаги ожидания в строке 1 скрипта вы получите следующие выходные данные:

expect version 5.45
argv[0] = /usr/bin/expect  argv[1] = -d  argv[2] = -f  argv[3] = ./expectscript
set argc 0
set argv0 "./expectscript"
set argv ""
executing commands from command file ./expectscript
spawn jshell
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {19712}

expect: does "" (spawn_id exp8) match glob pattern "jshell>"? no
|  Welcome to JShell -- Version 9.0.1
|  For an introduction type: /help intro

expect: does "|  Welcome to JShell -- Version 9.0.1\r\n|  For an introduction type: /help intro\r\n" (spawn_id exp8) match glob pattern "jshell>"? no

jshell>
expect: does "|  Welcome to JShell -- Version 9.0.1\r\n|  For an introduction type: /help intro\r\n\r\njshell> " (spawn_id exp8) match glob pattern "jshell>"? yes 
expect: set expect_out(0,string) "|  Welcome to JShell -- Version 9.0.1\r\n|  For an introduction type: /help intro\r\n\r\njshell> "
expect: set expect_out(spawn_id) "exp8"
expect: set expect_out(buffer) "|  Welcome to JShell -- Version 9.0.1\r\n|  For an introduction type: /help intro\r\n\r\njshell> "
send: sending "3\r" to { exp8 }

expect: does "" (spawn_id exp8) match glob pattern "jshell>"? no

expect: does "\u001b[6n" (spawn_id exp8) match glob pattern "jshell>"? no
^[[32;1Rexpect: timed out

Ответы на вопрос(1)

Ваш ответ на вопрос