Para inserir texto no stdin de um programa, use canais e / ou redirecionamento :
echo 1 | myprogram
(echo "First line"
echo "Second line") | myprogram
myprogram <<EOF
First line
Second line
EOF
No caso de programas CLI interativos ( não full-terminal), é possível usar pipes nomeados ou coprocessos como uma espécie deexpect
(que você excluiu 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]}
(Tenha cuidado ao ler o canal de saída; por exemplo, head -1 <out
não lerá apenas uma linha - ele armazenará um bloco inteiro de 4k, imprimirá uma linha, descartará o restante).