interact
receberá sua entrada da entrada padrão expects
, que é o canal para echo
agora fechado.
Você pode escrevê-lo (sintaxe ksh / zsh / bash):
expect <(echo "spawn gdb
expect \"(gdb) \"
send \"help\r\"
expect \"(gdb) \"
interact" )
Isso ainda é alimentado por meio de um pipe, mas, desta vez, o pipe é fornecido como um argumento de caminho para expect
, então a stdin do expect não é afetada.
Neste caso, o óbvio para escrever seria:
expect -c '
spawn gdb
expect "(gdb)"
send "help\r"
expect "(gdb) "
interact'
expect
como sh
e a maioria dos shells permitem passar scripts inline com -c
.
Se você ainda precisar transmitir a saída de um comando (como echo
no seu caso), poderá fazê-lo com -c
com:
expect -c "$(echo...)"
Isso significa que, no entanto, ao contrário das abordagens de pipe, expect
não será iniciado até que o comando seja concluído.
BTW, aqui, você poderia usar um arquivo .gdbinit
ou -ix
para gdb
, você realmente não precisa de expect
.