Vous recherchez xdotool.
L'équivalent xdotool de vos exemples de commandes est :
xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
Pour insérer du texte dans le stdin d'un programme, utilisez des tubes et/ou une redirection :
echo 1 | myprogram
(echo "First line"
echo "Second line") | myprogram
myprogram <<EOF
First line
Second line
EOF
Dans le cas de programmes CLI interactifs (pas terminaux complets), il est possible d'utiliser des tubes nommés ou des coprocessus comme une sorte de expect
du pauvre (que vous avez exclu parce que vous êtes 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]}
(Soyez prudent lors de la lecture à partir du tube de sortie ; par exemple head -1 <out
ne se contentera pas de lire une ligne - il mettra en mémoire tampon un bloc complet de 4k, imprimera une ligne, supprimera le reste.)