我想在 shell 中键入一个字符xdotool
并将该字符的信号发送到 gedit,以便在 gedit 中键入该字符。
我写了这个脚本:
#!/bin/bash
gedit -s &
GEDPID=$!
sleep 2s
GEDWINID=`xdotool search --pid $GEDPID | tail -1`
echo "press any keys"
read i
xdotool windowactivate --sync $GEDWINID key --clearmodifiers --delay 100 "$i" && wmctrl -a Terminal
除了脚本等待enter向 gedit 发送键盘信号外,一切都运行良好。
所以我改成read i
了read -n1 i
, 让脚本在没有输入的情况下完成它的工作。
#!/bin/bash
gedit -s &
GEDPID=$!
sleep 2s
GEDWINID=`xdotool search --pid $GEDPID | tail -1`
echo "press any keys"
read -n1 i
xdotool windowactivate --sync $GEDWINID key --clearmodifiers --delay 100 "$i" && wmctrl -a Terminal
但它不会在 gedit 中输入任何字符!
这是一个问题,第二个脚本的问题是什么?read i
和有什么区别read -n1 i
导致这个问题?
我能够重新创建这个问题。虽然我不知道为什么 和 之间存在差异
read
,read -n1
但在密钥使其工作之前添加一个简单的延迟。我的猜测是窗口切换后没有足够的时间来注册按键。我修改了您的原始脚本,以便它正确获取当前终端的窗口 ID 并在终端和 Gedit 窗口之间切换焦点。该脚本使用无限循环,因此在终端窗口中打印的所有击键都将传输到 Gedit。Ctrl用+取消它C。