Posso executar o jshell dentro do Unix expect?
Gostaria de redirecionar a entrada jshell usando o expect, para simular a digitação nas demonstrações gravadas. Mas, embora eu possa gerar um processo jshell a partir de um script expect, que também pode reconhecer o prompt jshell, depois disso nada funciona. esperar saídas que parecem uma sequência de controle, como^[[24;9R
e não vejo nenhuma saída do jshell. Diferentes tipos de terminais produzem seqüências de caracteres diferentes, mas nenhum deles funciona. Esse comportamento é consistente entre a expectativa no Ubuntu e no Mac OS. Todas as sugestões de como investigar esse problema serão bem-vindas.expect -d
não ajuda.
Aqui está uma transcrição da sessão jshell que quero simular
$ jshell
| Welcome to JShell -- Version 9.0.1
| For an introduction type: /help intro
jshell> 3
$1 ==> 3
jshell>
e aqui está o script que eu acho que deveria fazê-lo:
#!/usr/bin/expect -f
spawn jshell
expect jshell>
send "3\r"
expect jshell>
Quando executo esse script (no Mac OS 10.11.6, mas obtenho resultados muito semelhantes no Ubuntu), vejo esta saída
spawn jshell
| Welcome to JShell -- Version 9.0.1
| For an introduction type: /help intro
jshell> ^[[24;9R
Depois, espere o tempo limite e a última linha de saída será substituída pelo prompt do shell (para que pareça que, no tempo limite, mais caracteres de controle estejam sendo gravados).
Adicionando-d
para os sinalizadores a serem esperados na linha 1 do script resulta nesta saída:
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