wmctrl -l | awk '{ if ($4 == "Android") print $4" "$5" "$6" "$7" "}' | while read -r line;do wmctrl -r \"$line\" -e 1,0,0,100,100; done

好吧,我知道这有点难读,让我把它拆开。
wmctrl -l

将列出由wmctrl控制的所有窗口。我的输出如下。
0x00800024 -1 DarkNetLab xfce4-panel
0x02c00006 -1 DarkNetLab Desktop
0x06806427  0 DarkNetLab mac@DarkNetLab: /opt/Analysis
0x06000008  0        N/A Emulator
0x06000003  0        N/A Android Emulator - droid8:5554
0x0b800009  0        N/A Emulator
0x0b800003  0        N/A Android Emulator - droid11:5556
0x05400009  0        N/A Emulator
0x05400003  0        N/A Android Emulator - droid9:5558

然后awk(| awk '{ if ($4 == "Android") print $4" "$5" "$6" "$7" "}')抓取第4个元素是“android”的所有行,并打印接下来的4个元素,生成以下内容…
Android Emulator - droid8:5554
Android Emulator - droid11:5556
Android Emulator - droid9:5558

这些都是我要移动的正确窗口,需要与wmctrl的-r参数一起传入
最后,我使用| while read -r line;do wmctrl -r \"$line\" -e 1,0,0,100,100; done来使用每个窗口,如Android Emulator - droid8:5554来使用wmctrl命令移动窗口。
窗户不许动!啊!
如果为了回显应该执行的命令而将代码更改为wmctrl -l | awk '{ if ($4 == "Android") print $4" "$5" "$6" "$7" "}' | while read -r line;do echo "wmctrl -r \"$line\" -e 1,0,0,100,100"; done,则会得到以下结果。
wmctrl -r "Android Emulator - droid8:5554" -e 1,0,0,0,100,100
wmctrl -r "Android Emulator - droid11:5556" -e 1,0,0,0,100,100
wmctrl -r "Android Emulator - droid9:5558" -e 1,0,0,0,100,100

如果我复制并粘贴任何一行到终端,并执行终端正确运行它并移动窗口。所以我想知道为什么剧本不起作用!
提前感谢您的帮助,我猜这是bash何时/如何计算命令和替换变量值的问题。
谢谢你的帮助!

最佳答案

删除“$line”周围的转义符,即将...do wmctrl -r \"$line\"...更改为仅...do wmctrl -r "$line"...

关于linux - 为什么此wmctrl脚本不能移动窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41860168/

10-13 05:31