¿Puedo ejecutar jshell dentro de Unix esperar?

Me gustaría redirigir la entrada de jshell usando el modo de espera, para poder simular escribir en demostraciones grabadas. Pero aunque puedo generar un proceso jshell a partir de un script de esperar, que también puede reconocer el mensaje jshell, después de eso nada funciona. esperar salidas lo que parece una secuencia de control, como^[[24;9R, y no veo ningún resultado de jshell. Diferentes tipos de terminales producen diferentes secuencias de caracteres, pero ninguno de ellos funciona. Este comportamiento es consistente entre esperar en Ubuntu y Mac OS. Cualquier sugerencia sobre cómo investigar este problema sería bienvenida.expect -d no ayuda

Aquí hay una transcripción de la sesión jshell que quiero simular

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

jshell> 3
$1 ==> 3

jshell> 

y aquí está el script que creo que debería hacerlo:

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

Cuando ejecuto ese script (en Mac OS 10.11.6, pero obtengo resultados muy similares en Ubuntu), veo esta salida

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

jshell> ^[[24;9R

Luego, espere el tiempo de espera, y la última línea de salida se sobrescribe con el indicador de comandos del shell (por lo que parece que al momento del tiempo de espera se escriben más caracteres de control).

Agregando-d a las banderas para esperar en la línea 1 de los resultados del script en esta salida:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta