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" "}')抓住了第四个元素是"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何时/如何使用命令和变量替代值的问题。
谢谢你的帮助!
发布于 2017-01-25 20:13:56
删除"$line“周围的转义符,即将...do wmctrl -r \"$line\"...改为...do wmctrl -r "$line"...。
https://stackoverflow.com/questions/41860168
复制相似问题