Bash에서 시뮬레이션 된 키 스트로크 보내기


19

최근 에 bash에서 c ++ 프로그램자동화 하는 데 사용할 수있는 스크립트를 작성하려고했습니다 . AutoIt을 알고 있다면 내가하려는 일의 예를 간단히 보여줄 수 있습니다.

send("1{enter}")

또는

send("!a")

OK AutoIt을 사용하지 않는 사람들을 위해 :

첫 번째 예는 시뮬레이션 된 "1"키 입력과 Enter (CR)을 차례로 보냅니다.

두 번째 예는 alt-a를 보냅니다.

나는 이것을 bash 에서 이것을하려고 노력하고있다 . 다른 스크립팅 언어는 수행하지 않습니다

또한 나는 숟가락 먹이를 선호 하지 않습니다 . 제발 그것을 작성하는 방법을 지정합니다 . 나를위한 스크립트 작성은 허용되지 않습니다.


1
명령 줄, ncurses 또는 그래픽 프로그램을 자동화하고 있습니까?
user1686

1
지금은 명령 줄을 자동화하고 있습니다. 그것은 자동으로 cin (콘솔 입력)에 입력을 공급해야합니다
Ishan

답변:


16

프로그램의 표준 입력에 텍스트를 공급하려면 파이프 및 / 또는 리디렉션을 사용하십시오 .

echo 1 | myprogram

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

myprogram <<EOF
First line
Second line
EOF

대화식 CLI 프로그램 ( 전체 터미널이 아닌 )의 경우 명명 된 파이프 또는 보조 프로세스 를 일종의 가난한 사람 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 블록을 버퍼링하고 한 줄을 인쇄하고 나머지는 버립니다.)


두 대답 모두 똑같이 좋습니다. 그러나 이것은 내가 더 많이 찾은 것입니다.
Ishan

CLI 프로그램 / 풀 터미널이란 무엇입니까?
Chris Stryczynski

CLI는 명령 행 인터페이스를 나타냅니다. CLI 프로그램은 명령 행에서 실행되는 간단한 프로그램으로 일반적으로 stdin 및 stdout을 사용하여 일부 작업을 수행 한 다음 실행을 마치고 명령 행 프롬프트로 돌아갑니다. grep그리고 curl이것의 좋은 예입니다. 완전한 터미널 프로그램은 vimand와 같은 전체 창을 제어하는 ​​것입니다 screen.
Trevin Avery 2016 년

16

xdotool을 찾고 있습니다.

xdotool의 예제 명령은 다음과 같습니다.

xdotool key 1 Return
xdotool keydown Alt key a keyup Alt

이것은 좋다. 그러나 나는 순수한 bash 코드에 대해 생각하고 있었다
Ishan

9
@Ishan : 순수한 bash 코드로 그러한 작업을 수행하는 것은 실제로 불가능합니다 . Bash는 X11을 직접 사용할 수 없으며 기존 X11 라이브러리도 사용할 수 없습니다. X11 소켓에 직접 연결하고 (bash는 Unix 소켓이 아닌 TCP 만 수행함) X11 프로토콜을 수동으로 구문 분석하고 (bash에서 이진 데이터 구문 분석이 실패 함) 적절한 응답을 작성해야합니다. bash는 쉘이며 외부 도구를 연결하여 작동 하도록 설계되었습니다 .
user1686
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.