한 줄에 여러 xdotool 명령을 서로 분리하여 실행


11

나는 실행하기 위해 노력하고있어 xdotool type word다음 xdotool key Return시작 aplications에 환경 설정에서.
하지만 사용하는 경우 &&또는 ;입력의 연속으로, xdotool 평가하여 그것을.


1
내 사용의 경우에 그것은 작동 xdotool type $'word\r'를 Where, $''이스케이프가 \r반환 같은 것으로 ( \n여기서 작동하지 않습니다).
Scz

답변:


16

간단히 말해 :
스크립트를 사용하십시오.

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

그리고 스크립트 경로를 Exec필드 에 넣으십시오 .


긴 이야기:

xdotool맨 페이지 에 따르면 :

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

셸 구문이므로 시작 응용 프로그램은 셸 구문을 지원하지 않으므로 명령 체인을 통해 ;또는 &불가능합니다. 그러나 원하는 것을 Enter입력 한 후 누르기 만하면 회전하는 방법이 있습니다.

"ASCII"줄 바꿈이라고해서 맨손을 의미하는 것은 아닙니다 \n. 그리고 명령 대체 ( xdotool type "$(printf '\n')")는 줄 바꿈 줄을 먹는다. 이 xdotools포럼 게시물을 따라 다음을 시도했습니다.

xdotool type "$(printf 'date\n ')"

그리고 효과가있었습니다. 그러나 뒤에 약간의 문자가있는 경우에만 작동하며 \n, 분명히 뒤에 공백이 남습니다. 원하는 것은 아닙니다. 나는 그것을 다음과 같이 수정했다.

xdotool type "$(printf 'date\n\e ')"

그리고 이것은 작동하며 후행 공간을 남기지 않습니다. 그러나 쉘에서 Vi 모드를 사용하는 사람들에게는 문제가 발생할 수 있습니다.

@steeldriver의 의견 덕분에 나는 이것이 명령을 실행하는 터미널에서 시도했기 때문에 알아 냈습니다. 누르기 Enterxdotool명령 사이의 작은 간격 으로 단일 줄 바꿈이 올바르게 등록되기에 충분했습니다. 그러므로:

sleep 0.1; xdotool type $'date\n'

따라서 라인을 인용하여 연장하십시오.

xdotool type 'date
'

또는 @steeldriver가 제안한대로 쉘 해석을 사용하는 것이 올바른 옵션처럼 보입니다.

그러나 다음을 포함하는 스크립트 :

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

Exec필드 벌금을했다. 사실, 나는 항상 데스크탑 파일에서 복잡한 명령에 스크립트를 사용하는 것이 좋습니다.

/usr/bin/xdotoolshebang에 스크립트를 사용할 수 있지만 맨 페이지에 " script모드가 완전히 구현되지 않았으며 기대에 미치지 못할 수 있습니다"라는 메시지가 표시되므로 스크립트를 bash에 집착했습니다.

나는 물건을 보았을 지 모르지만 첫 두 번의 시도 sleep에서 typeand key명령 사이에 (작은)을 넣어야했습니다 . 그것은 다른 창 대신 명령을 실행하는 터미널에서 시도한 결과였습니다.


문자 줄 바꿈, 즉이 작동하는 것 같다 xdotool type 'word에서 'Enter'키를 누른 다음 닫는 다음 '과 같은 수행, $'word\n'(이 떠들썩한 파티가 확장 \n리터럴 개행 문자로 인수를 전달하기 전에 xdotool).
스틸 드라이버

@steeldriver 히트 앤 미스. 그것은 내가 시도하고 작동하지 않은 첫 번째 것 중 하나였습니다.
muru

@steeldriver 일이었다 무슨 짓을 (두이 닫기 전에 들어갑니다 줄 바꿈 '또는 두 개의 \n로들 $트릭).
muru

그것은 이상합니다. 추가 줄 바꿈이 필요하지 않은 것 같습니다. 대상 창을 소유 한 응용 프로그램에 의존하는지 궁금합니다 (geany에서 빈 문서를 사용하고 있습니까)?
스틸 드라이버

@steeldriver 팁 주셔서 감사합니다. 내가 필요로하는 것에 대해 환각을 느끼지 않았다는 것을 알게되어 기쁘다 sleep(작은 글의 참고를 보라). 나는 창을 바꾸지 않고 동일한 창에서 시도했지만 sleep 1, 두 가지 방법 모두 동일한 창과 전환 후에 작동했습니다. 내 자신의 Enter 키 누르기가 어떻게 든 xdotool 줄 바꿈을 방해했다고 생각합니다. 그러나 데스크탑 파일의 더 복잡한 요구 사항에 대해서는 여전히 스크립트를 권장합니다.
muru

1

응용 프로그램이 여러 명령을 구문 분석하지 않고 단일 명령으로 취급하는 것 같습니다. 따라서 쉘 호출을 감싸서 단일 명령으로 만듭니다 ...

bash -c 'xdotool type date; xdotool key Return'

이제 다른 쉘 작업도 할 수 있습니다 ...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

마지막에 사용 된 "date"명령에는 줄 바꿈이 포함되어 있습니다! "xdotool"이 출력합니다.

참고 :이 작업을 키보드 매크로로 수행하는 경우이 작업을 개선하기 위해 "xdotool"에 몇 가지 옵션을 추가 할 것입니다 ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.