사용자가 숫자를 입력하고 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
하려면 다음 j
을 9
수행합니다.
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