Parece que deve haver uma maneira melhor, mas você pode usar uma função de wrapper:
wrapper () { local text=$(</dev/stdin); echo "$text"; my_cli <<<"$text"; }
wrapper << HERE_DOC
enable
configure
10
exit
exit
HERE_DOC
Para processar o documento aqui, linha por linha:
wrapper2 () { local line; while read -r line; do echo "$line"; my_cli <<<"$line"; done; }
Se você interagir manualmente com o seu programa, ele exibe a saída? Ele sai para stdout ou stderr?
Outra opção que pode funcionar para você é expect
.