Как выполнить команду терминала каждый раз, когда закрывается окно Firefox

8

Мне нужно выполнить это:

rm -rf ~/.wine-pipelight/*;
rm -rf ~/.wine-pipelight/./.*;
cp -a ~/viewright_backup/. ~/.wine-pipelight

каждый раз, когда окно Firefox закрывается. Но не обязательно, когда все окна закрыты, но на каждом окне, которое закрыто. Например, если у меня есть одно окно Firefox и одно всплывающее окно Firefox. Если я закрою хотя бы одно окно, я хочу выполнить эту команду. Это возможно? Спасибо!

Душан Милошевич
источник
1
почему ты хочешь сделать это? Скорее всего, было бы легче решить проблему, чем использовать такой обходной путь. Какую версию Pipelight и wine-compholio вы используете?
Михаэль Мюллер
Я следовал за этим . это на сербском языке, но в описании используются коды.
Душан Милошевич
Это одна из услуг сербской широкополосной компании, которая официально не поддерживается на Linux.
Душан Милошевич

Ответы:

11

Единственный способ, которым я могу придумать, не очень элегантный. Вы можете запустить скрипт в фоновом режиме, который подсчитывает количество открытых окон Firefox каждую секунду и запускает вашу команду, если это число меняется. Что-то вроде:

#!/usr/bin/env bash


## Run firefox
/usr/bin/firefox &

## Initialize the variable to 100
last=100;

## Start infinite loop, it will run while there
## is a running firefox instance.
while pgrep firefox >/dev/null;
do
    ## Get the number of firefox windows    
    num=$(xdotool search --name firefox | wc -l)

    ## If this number is less than it was, launch your commands
    if [ "$num" -lt "$last" ]
    then
        rm -rf ~/.wine-pipelight/*;
        ## I included this since you had it in your post but it
        ## does exactly the same as the command above.
        rm -rf ~/.wine-pipelight/./.*;
        cp -a ~/viewright_backup/. ~/.wine-pipelight      
    fi

    ## Save the number of windows as $last for next time
    last=$num

    ## Wait for a second so as not to spam your CPU.
    ## Depending on your use, you might want to make it wait a bit longer,
    ## the longer you wait, the lighter the load on your machine
    sleep 1

done

Сохраните приведенный выше скрипт как firefox, поместите его в свой ~/binкаталог и сделайте его исполняемым chmod a+x ~/bin/firefox. Так как Ubuntu добавляет ~/binк вашему $PATHпо умолчанию и добавляет его перед любыми другими каталогами, запущенный firefoxзапустит этот скрипт вместо обычного исполняемого файла firefox. Теперь, когда скрипт запускается /usr/bin/firefox, это означает, что ваш обычный firefox появится, как вы и ожидаете, только с запущенным скриптом. Сценарий закроется, как только вы закроете Firefox.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:

Этот скрипт

  1. Не элегантно, его нужно запускать как бесконечный цикл в фоновом режиме.
  2. Требуется xdotool, установите его сsudo apt-get install xdotool
  3. Не работает для вкладок, только окна.
terdon
источник
хороший обходной путь
Кенн
Спасибо! Я не буду запускать его автоматически, а запустлю его при запуске Firefox. Спасибо большое, попробую.
Душан Милошевич
@terdon Так как я планирую запустить его при запуске Firefox, возможно ли остановить его, когда Firefox закрыт. Может быть что - то вроде: while ["0" -lt "$(xdotool search --name firefox | wc -l)" ]. Я не знаю, правильный ли синтаксис, но вы поняли смысл ... Не могли бы вы переписать его, чтобы соответствовать этому условию? Спасибо!
Душан Милошевич
@DusanMilosevic см обновленный ответ. Я переписал его так, что сам скрипт запускает Firefox и работает только до тех пор, пока работает хотя бы один экземпляр Firefox.
тердон