我正在尝试编写一个脚本,允许用户输入数字并将 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