
ユーザーが数値を入力し、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