Stai cercando xdotool.
L'equivalente di xdotool dei tuoi comandi di esempio è:
xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
Per inserire del testo nello stdin di un programma, usa le pipe e/o il reindirizzamento:
echo 1 | myprogram
(echo "First line"
echo "Second line") | myprogram
myprogram <<EOF
First line
Second line
EOF
In caso di programmi CLI interattivi (non quelli full-terminal), è possibile usare named pipe o coprocessi come una sorta di expect
dei poveri (che hai escluso perché è 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]}
(Fai attenzione quando leggi dalla pipe di output; ad esempio head -1 <out
non leggerà solo una riga, ma memorizzerà nel buffer un intero blocco da 4k, stamperà una riga e scarterà il resto.)