Похожие вопросы

Автоматическая установка японского языкового пакета в Win7
Как использовать кнопку отключения звука на клавиатуре, чтобы отключить только динамики, а не наушники?
Компиляция электронной таблицы Excel из сообщения Outlook
Автоматическая настройка сочетаний клавиш в KDE5
Автоматический щелчок в linux при выполнении других задач
программа Sysprep.exe и автоматической установки.xml-автоматическое применение ключа продукта не работает
Автоматическая установка программного обеспечения в Windows
автоматическое сохранение вложения outlook
Автоматизация последовательности нажатий клавиш в Mac
Как заставить Thunderbird автоматически архивировать сообщения
Где Dashlane хранит файл данных паролей?
Можно ли автообрезка черных полос по краям видео через FFmpeg?
Подключение к серверу UltraVNC в один клик
Каков правильный способ автоматической перезагрузки сервера Windows? [закрытый]
Как настроить порт FreeBSD со значениями по умолчанию (рекурсивно)?

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

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

send("1{enter}")

или

send("!a")

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

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

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

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

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

5
задан jww
источник

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 2017-05-18 08:40:40
источник

вы ищете xdotool.

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

xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
14
отвечен Dennis 2016-12-13 21:58:25
источник

Другие вопросы automation bash linux