2017-01-25 4 views
1
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 не перемещает окна

wmctrl -l 

отобразит все окна, контролируемые wmctrl. Мой вывод следующий.

0x00800024 -1 DarkNetLab xfce4-panel 
0x02c00006 -1 DarkNetLab Desktop 
0x06806427 0 DarkNetLab [email protected]: /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 

Это все правильные окна I хотите переместиться и должны быть переданы с аргументом -r для 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

Вау, вы человек. Не могу поверить, что это было так. Если вы хотите опубликовать это как ответ, я буду отмечать его как правильное. – MikeSchem

ответ

1

Снимите экраны вокруг «$ line», т. Е. Смените ...do wmctrl -r \"$line\"... на ...do wmctrl -r "$line"....