Estás buscando xdotool.
El equivalente de xdotool de sus comandos de ejemplo son:
xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
Para introducir texto en la entrada estándar de un programa, utilice conductos y/o redirección:
echo 1 | myprogram
(echo "First line"
echo "Second line") | myprogram
myprogram <<EOF
First line
Second line
EOF
En el caso de programas CLI interactivos (no los de terminal completo), es posible usar canalizaciones con nombre o coprocesos como una especie de expect
del pobre (que descartaste por ser Tcl):
mkfifo in out
myprogram <in >out &
echo "First line" >in
read -r reply <out
mkfifo in out
myprogram <in >out &
exec {infd}>in {outfd}<out
echo "First line" >&$infd
read -r reply <&$outfd
coproc foo { myprogram; }
echo "First line" >&${foo[1]}
read -r reply <&${foo[0]}
(Tenga cuidado al leer de la tubería de salida; por ejemplo, head -1 <out
no solo leerá una línea:almacenará en el búfer un bloque completo de 4k, imprimirá una línea y descartará el resto).