为什么这个wmctrl脚本不会移动窗口

时间:2017-01-25 19:36:46

标签: linux bash shell awk command

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

这些是我想要移动的所有正确的窗口,需要使用-m参数传递给wmctrl

最后,我使用| while read -r line;do wmctrl -r \"$line\" -e 1,0,0,100,100; done来使用Android Emulator - droid8:5554之类的每个窗口来使用wmctrl命令移动窗口。

NO WINDOWS MOVE !!

如果我将代码更改为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 evals命令并将值替换为变量的问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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