将 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并传递键aj9,您可以执行以下操作:

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 

相关内容