Как закрыть новое окно Firefox из Терминала?

10

У меня есть несколько экземпляров Firefox, работающих в Ubuntu 14.04. Как я могу закрыть последнее открытое окно / экземпляр из Терминала?

Я попытался использовать псевдоним cfct, определенный в ответе на связанный вопрос , но это не сработало.

SGU
источник
@chaos Я предполагаю, что OP означает окна, а не вкладки
Джейкоб Влейм
@JacobVlijm этот ответ также закрывает окна и кажется мне единственным решением. Поскольку Firefox запускает только один процесс, независимо от того, сколько окон открыто, вам нужно это решение в dublicate. killall firefoxбудет SIGTERMвесь процесс, а не только окно.
хаос
@chaos Я не согласен, вполне возможно, меня нет дома, посмотрим, достаточно ли я быстр, чтобы дать ответ в своем перерыве :)
Джейкоб Влим
1
@chaos Дубликаты предназначены для тех случаев, когда вопросы совпадают, а не ответы. Некоторое совпадение неизбежно.
Сет
Что такое cfct? Поиски в основном возвращают именно этот вопрос.
TRiG

Ответы:

13

Чтобы создать команду, которая находит idпоследнее окно, созданное Firefox(и закрывающее его), вам необходимо wmctrlустановить:

sudo apt-get install wmctrl

Команда

Затем используйте команду:

wmctrl -ic "$(wmctrl -l | grep 'Mozilla Firefox' | tail -1 | awk '{ print $1 }')"


Объяснение:

wmctrl -l

перечисляет все окна, но важным свойством команды является то, что она перечисляет окна в порядке их создания .

Следовательно:

wmctrl -l | grep 'Mozilla Firefox' | tail -1 | awk '{ print $1 }'

буду:

  • список всех окон:

    wmctrl -l
    
  • найдите те (строки) с «Mozilla Firefox» в их названии:

    grep 'Mozilla Firefox'
    
  • найти последний (который также является последним созданным):

    tail -1
    
  • извлечь первую строку в строке (это окно -id):

    awk '{ print $1 }'
    

Команда:

wmctrl -ic

затем убьет самое последнее окно Firefox по его идентификатору (изящно).

Или даже более надежно:

В то время как команда выше хорошо работает практически во всех случаях есть небольшая вероятность конфликтов имен, если , например , другое окно существует с «Mozilla Firefox» в названии, но не окно из Firefox(маловероятно, но все же).

Что должно работать «водонепроницаемый» , поэтому для идентификации окна в списке окон ( с помощью wmctrl -lp) с помощью ПИД - регулятора из firefox, вместо строки в имени окна:

wmctrl -ic "$(wmctrl -lp | grep "$(pgrep firefox)" | tail -1 | awk '{ print $1 }')"

Как вы можете видеть, в этой команде

wmctrl -l | grep 'Mozilla Firefox'

производство строк, содержащих «Mozilla Firefox», заменяется на:

wmctrl -lp | grep "$(pgrep firefox)"

производя строки, содержащие pid firefox (как вывод pgrep firefox)

Якоб Влейм
источник
2

Чтобы закрыть окно (также со многими открытыми вкладками), используйте эту команду:

wmctrl -a firefox; xdotool key Ctrl+Shift+w

Обратите внимание , что так wmctrlи xdotoolдолжно быть установлено:

$ sudo apt-get install wmctrl xdotool

Смотрите также ответ: закройте текущую вкладку Firefox с помощью терминала .

Мой ответ немного изменен, потому что Ctrl+ Shift+ wзакрывает окно Firefox.


Для всех ярлыков см. Сочетания клавиш Firefox .

хаос
источник