linux bash 脚本“xdotool windowactivate $variable”返回错误[关闭]

问题描述 投票:0回答:1
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 的二进制引用。

linux bash x11 xdotool
1个回答
1
投票

您可以在

&
行上将
$
替换为
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 这对我来说也是新的,可以测试你的脚本是否存在这些类型的小问题和解决方案建议。您也可以使用相同的方法来识别此问题。

© www.soinside.com 2019 - 2024. All rights reserved.