web-dev-qa-db-fra.com

Envoi de frappes simulées dans Bash

J'ai récemment essayé d'écrire un script pouvant être utilisé pour automatiser mon programme c ++ en bash. Si vous connaissez AutoIt, je peux simplement vous montrer un exemple de ce que j'essaie de faire:

send("1{enter}")

ou

send("!a")

OK Pour ceux qui ne parlent pas AutoIt:

Le premier exemple envoie une frappe simulée "1" suivie d’une entrée (CR)

Le deuxième exemple envoie alt-a

J'essaie spécifiquement de faire cela dans bash . Aucun autre langage de script ne fera l'affaire

En outre, je ne préférerais pas une alimentation à la cuillère. Veuillez spécifier comment l'écrire . Il est interdit d'écrire le script pour moi.

18
Ishan

Pour insérer du texte dans le stdin d'un programme, utilisez des conduites 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 ( et non complets), il est possible d’utiliser des canaux nommés ou des co-processus comme une sorte de expect du pauvre (que vous avez exclu à cause de 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 lorsque vous lisez dans le canal de sortie; par exemple, head -1 <out ne lira pas une seule ligne - il mettra en mémoire tampon un bloc complet de 4k, imprimera une ligne et éliminera le reste.)

15
grawity

Vous recherchez xdotool .

les exemples de commandes de xdotool sont:

xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
16
Dennis