Intereting Posts
CentOS использует .pac-файл как прокси-сервер Как отключить символическую ссылку CentOS? Команда Shell для удаления первой строки, заключенной с косой чертой Репозитории в стиле Debian и RedHat скомпрометированы ошибкой Heartbleed OpenSSL? Как включить Iptables в Fedora 18? Fix-клавиши для подсветки клавиатуры Как заблокировать свою учетную запись с удаленного входа ssh с паролем? Почему в терминале возникает следующая ошибка при использовании команд Linux? Запись содержимого из файла в другой файл с установленными временными интервалами с использованием разделителей Определить файлы text / ascii в Linux / Solaris Использование процессора каждый раз. Очистить недавнюю открытую историю файлов на Linux Mint Аутентификация отказалась: плохое владение или режимы для файла /var/git/.ssh/authorized_keys Текущий каталог ./ в qsub? Как я могу записать, какое программное обеспечение я использую больше всего?

Скрипт, чтобы максимизировать приложение при его запуске

Я знаю, что этот вопрос дублируется:
Как установить размер окна и местоположение приложения на экране с помощью командной строки?
Изменение размера окна из командной строки

Я смог решить свой вопрос с помощью первой ссылки. Но я изо всех сил пытаюсь изучить язык Bash, и я хотел бы знать, что происходит со следующим сценарием:

#!/bin/bash xfce4-settings-manager & sleep 0.1 xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'} wmctrl -i -r $1 -b add,maximized_vert,maximized_horz & 

После запуска скрипта я проверяю, что «xwininfo» принимает другое значение ID приложения. Я не понимаю, почему. Может кто-нибудь дать мне руку с этой проблемой?

Заранее спасибо.

    Инструмент, который вы ищете, – это пирог Дьявола (версия 1 и 2, обратите внимание, что они используют совершенно разные языки программирования). На этом сайте есть несколько примеров, например 1 2 3 4 .

    Проблема с вашим скриптом уже была xwininfo в комментарии: строка, которая извлекает вывод из xwininfo , не подключается к строке, которая вызывает wmctrl . Чтобы использовать вывод команды в скрипте, используйте подстановку команд .

     windowid=$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}') wmctrl -i -r "$windowid" -b add,maximized_vert,maximized_horz & 

    Я использовал промежуточную переменную, чтобы линия не становилась нечитабельно длинной, но вы можете сделать все это inline:

     wmctrl -i -r "$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}')" -b add,maximized_vert,maximized_horz & 

    Я также объединил вызовы grep и awk, мне проще использовать один инструмент здесь.

    Вам не нужно использовать xwininfo для поиска идентификатора окна: wmctrl может это сделать, просто передайте ему имя окна.

     wmctrl -r "xfce4-settings-manager" -b add,maximized_vert,maximized_horz & 

    Поскольку вы хотите:

    результат второй строки извлекается на $ 1 третьей строки

    ты мог:

     #!/bin/bash xfce4-settings-manager & sleep 0.1 wid=$(xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'}) wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz & 

    хотя если бы я мог предложить другую версию (непроверенную, так как я не перед дисплеем X):

     #!/bin/bash xfce4-settings-manager & while ! pgrep xfce4-settings-manager > /dev/null do : done wid=$(xwininfo -name "xfce4-settings-manager" | awk '/xwininfo:/ { print $4 }') wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz 

    Изменения:

    • Я не уверен, что wmctrl должен быть помещен в фоновом режиме, поэтому я удалил &
    • Я объединил awk и grep, потому что awk может «grep»
    • Я изменил sleep 0.1 , который предполагает, что xfce4-settings-manager запускается за это время, в цикл, который просит pgrep искать процесс вместо этого

    Спасибо за ответ. Я попытался сделать то, что @Gilles и @Jeff объяснил вышеприведенными комментариями, но сценарий не работает. У него та же проблема, о которой я упоминал в своем первом сообщении.

    Позвольте мне объяснить, что происходит (строка за строкой):

    1. Сценарий запускает «xfce4-settings-manager»

      USER @ PC: ~ $ xfce4-settings-manager & sleep 0.1;

    [3] 9825

    1. Для этого требуется значение окна «xfce4-settings-manager». В этом примере мне нужен только результат вывода. В сценарии я написал это как Жиль, и Джефф сказал мне.

      USER @ PC: ~ $ xwininfo -name "xfce4-settings-manager" | awk '$ 1 == "xwininfo:" {printf $ 4}' 0x5400001

    2. Я включаю значение окна в последней команде (0x5400001), но окно не максимизируется.

      USER @ PC: ~ $ wmctrl -i -r 0x5400001 -b add, maximized_vert, maximized_horz

    [4] 9852

    1. Я запускаю команду «xwininfo» и выбираю окно «xfce4-settings-manager», и это его результат:

      USER @ PC: ~ $ xwininfo

    xwininfo: выберите окно, о котором вы хотели бы получить информацию, щелкнув мышью в этом окне.

    xwininfo: Идентификатор окна: 0x5800003 "Настройки"

    Абсолютный верхний левый X: 343

    Абсолютный верхний левый Y: 286

    Относительный верхний левый X: 5

    Относительный верхний левый Y: 19

    Ширина: 680

    Рост: 195

    Глубина: 24

    Визуальный: 0x20

    Визуальный класс: TrueColor

    Ширина границы: 0

    Класс: InputOutput

    Colormap: 0x22 (установлен)

    Состояние бит-гравитации: NorthWestGravity

    Гравитация окон: NorthWestGravity

    Состояние хранилища в хранилище: NotOseful

    Сохранить в разделе Состояние: нет

    Состояние карты: IsViewable

    Переопределить состояние переадресации: нет

    Уголки: + 343 + 286 -343 + 286 -343-287 + 343-287

    -геометрия 680×195 + 338 + 267

    [2] Сделано xfce4-settings-manager

    [4] + Готово wmctrl -i -r 0x5400001 -b add, maximized_vert, maximized_horz

    Значение окна «xfce4-settings-manager» отличается в зависимости от получения значения из командной строки или выбора окна с помощью курсора (0x5400001 & 0x5800003).

    Есть идеи?