Отправка имитированных нажатий клавиш в Bash

Я недавно пытался написать скрипт, который можно использовать для автоматизировать мою программу на c++ в bash. Если вы знаете, может, я могу просто показать вам пример того, что я пытаюсь сделать:

send("1{enter}")

или

send("!a")

OK для тех, кто не говорит AutoIt:

первый пример отправляет имитацию нажатия клавиши "1", а затем enter(CR)

второй пример отправляет alt-a

Я специально пытаюсь сделать это в bash. никакой другой язык сценариев не будет делать

кроме того, я бы не предпочитаете spoonfeed. Пожалуйста укажите, как писать. Писать сценарий для меня запрещено.

22
задан jww
20.03.2023 10:52 Количество просмотров материала 2438
Распечатать страницу

2 ответа

для подачи текста в стандартный ввод программы используйте трубы и/или перенаправления:

echo 1 | myprogram

(echo "First line"
 echo "Second line") | myprogram

myprogram <<EOF
First line
Second line
EOF

в случае интерактивных программ CLI (не Full-terminal одни), возможно использовать названные трубы или coprocesses как своего рода бедняк expect (который вы исключили из-за 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]}

(будьте осторожны при чтении из выходного канала; например head -1 <out не просто прочитать одну строку-он будет буфер один полный блок 4k, распечатать один очередь, остальное выбросьте.)

11
отвечен grawity 2023-03-21 18:40

вы ищете xdotool.

эквивалент xdotool ваших примеров команд:

xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
14
отвечен Dennis 2023-03-21 20:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх