echo $Win_ret
#returns 98566150
#xdotool windowactivate 98566150
#functions
xdotool windowactivate $Win_ret
#does not function
我认为这是一个语法错误,或者变量类型。我对 bash 没有太多经验。
完整脚本:
#!/bin/bash
case $1 in
"play")
key="ctrl+p"
;;
"next")
key='ctrl+n'
;;
"prev")
key='ctrl+b'
;;
"rand")
key='ctrl+shift+l'
;;
*)
echo "Usage: $0 play|next|prev|rand"
exit 1
;;
esac
declare -i Win_ret=&(xdotool getactivewindow)
xdotool search --name "MediaMonkey" windowactivate #--sync
sleep 0.1
xdotool key $key
sleep 0.1
echo $Win_ret
#returns 98566150
#xdotool windowactivate 98566150
#functions
xdotool windowactivate $Win_ret
#does not function
exit 0
我正在等待线路:
xdotool windowactivate $Win_ret
让我返回窗口 98566150,如下所示:
xdotool windowactivate 98566150
相反,在终端中运行时会弹出此错误:
There are no windows in the stack
Invalid window '%1'
Usage: windowactivate [options] [window=%1]
--sync - only exit once the window is active (is visible + active)
If no window is given, %1 is used. See WINDOW STACK in xdotool(
我尝试过将 Win_ret 声明为整数或不声明为整数。
将 " 放在 $Win_ret 周围会产生不同的错误:
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 20 (X_GetProperty)
Resource id in failed request: 0x0
Serial number of failed request: 26
Current serial number in output stream: 26
xdotool 使用对 Windows 的二进制引用。
您可以在
&
行上将 $
替换为 declare -i Win_ret=&(xdotool getactivewindow)
以使脚本正常运行。 bash 中的 &
运算符主要用于在后台运行命令,而不是获取命令的输出。
#!/bin/bash
case $1 in
"play")
key="ctrl+p"
;;
"next")
key='ctrl+n'
;;
"prev")
key='ctrl+b'
;;
"rand")
key='ctrl+shift+l'
;;
*)
echo "Usage: \$0 play|next|prev|rand"
exit 1
;;
esac
declare -i Win_ret=$(xdotool getactivewindow) # this line
xdotool search --name "MediaMonkey" windowactivate #--sync
sleep 0.1
xdotool key $key
sleep 0.1
echo $Win_ret
xdotool windowactivate $Win_ret
exit 0
echo $Win_ret
xdotool windowactivate $Win_ret
感谢 @pjh 推荐了一个很棒的网络应用程序 shellCheck 这对我来说也是新的,可以测试你的脚本是否存在这些类型的小问题和解决方案建议。您也可以使用相同的方法来识别此问题。