【问题标题】:Why does this wmctrl script not move the windows为什么这个 wmctrl 脚本不移动窗口
【发布时间】:2017-06-11 03:21:05
【问题描述】:
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 命令移动窗口。

没有 WINDOWS 移动!!

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

感谢您的帮助!

【问题讨论】:

  • 哇,你这个人。不敢相信那是大声笑。如果您想将此作为答案发布,我会将其标记为正确。

标签: linux bash shell awk command


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多