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/