xdotool 키 값을 사용자 입력으로 대체

xdotool 키 값을 사용자 입력으로 대체

사용자가 숫자를 입력하고 xdotool 키 값을 해당 입력으로 변경하는 스크립트를 작성하려고 합니다. xdotool의 키 입력은 공백으로 구분되어야 합니다.

xdotool key 1 2 8;

그래서 입력을 올바른 형식으로 변경하려면 sed를 사용해야 한다는 것을 알고 있습니다.

$variable | sed 's/./& /g'

여기서 문제가 발생합니다. 내 코드는 다음과 같습니다.

read -p 'Enter Number: ' enum
read -p 'Enter a number of times to run loop: ' loopnum
for (( i = 1; i<= loopnum; ++i )); do

xdotool mousemove  1000 785 click 1 click 1;
xdotool key $enum_with_spaces;
done

$enum_with_spaces를 실제로 공백이 있는 입력으로 바꾸려면 어떻게 해야 합니까?

답변1

먼저, 타당한 이유가 있는 경우가 아니면 입력 메시지를 표시하지 마세요(예: 명령 기록에 표시하고 싶지 않은 비밀번호 요청). 이는 스크립트의 흐름을 방해할 뿐이고 사용자가 값을 힘들게 입력해야 하며 동일한 명령을 다시 실행하거나 쉽게 자동화할 수 없음을 의미합니다. 대신 시작 시 스크립트의 매개변수에서 값을 읽습니다.

따라서 간단한 방법은 다음과 같습니다.

#!/bin/bash
## save the first argument as loopnum
loopnum=$1
## remove the first argument from the list of arguments
shift


for (( i = 1; i<= loopnum; ++i )); do
  xdotool mousemove  1000 785 click 1 click 1;
  ## Because of the 'shift' above, the aray $@ which holds the positional
  ## parameters (arguments) has everything except the loopnum, so we
  ## can pass it to xdotool
  xdotool key "$@";
done

그런 다음 사용하려는 값으로 실행할 수 있습니다. 예를 들어, loopnum=4키 및 키를 생성하고 전달 a하려면 다음 j9수행합니다.

your_script.sh 4 a j 9 

공백 없이 값을 반드시 전달해야 하는 경우 다음을 수행하세요.

#!/bin/bash
## save the first argument as loopnum
loopnum=$1
## save the second argument as enum
enum=$2
## Add the spaces and save in an array
enum=( $(sed 's/./& /g' <<<"$enum") )

for (( i = 1; i<= loopnum; ++i )); do
  xdotool mousemove  1000 785 click 1 click 1;
  xdotool key "${enum[@]}"
done

다음과 같이 실행하세요.

your_script.sh 4 aj9 

관련 정보