Como executar um comando terminal toda vez que o windows do firefox é fechado

8

Eu preciso executar isso:

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

toda vez que a janela do Firefox se fecha. Mas não necessariamente quando todas as janelas se fecham, mas em todas as janelas que estão fechadas. Por exemplo, se eu tiver uma janela do Firefox e uma janela pop-up do Firefox. Se eu fechar pelo menos uma janela, desejo executar este comando. Isso é possível? Obrigado!

Dusan Milosevic
fonte
1
Por que você quer fazer isso? Provavelmente seria mais fácil resolver o problema do que usar uma solução alternativa. Qual versão de Pipelight e wine-compholio você usa?
Michael Müller
Eu segui esse toutorial. está em sérvio, mas há códigos usados ​​na descrição.
Dusan Milosevic
É um serviço da empresa de banda larga da Sérvia que não é oficialmente suportado no linux.
Dusan Milosevic

Respostas:

11

A única maneira de pensar não é muito elegante. Você pode ter um script em execução em segundo plano que conte o número de janelas abertas do firefox a cada segundo e inicia seu comando se esse número mudar. Algo como:

#!/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

Salve o script acima como firefox, coloque-o em seu ~/bindiretório e torne-o executável chmod a+x ~/bin/firefox. Como o Ubuntu adiciona ~/binao seu $PATHpor padrão e o adiciona a outros diretórios, a execução firefoxiniciará esse script em vez do executável normal do Firefox. Agora, como o script está sendo iniciado /usr/bin/firefox, isso significa que o Firefox normal aparecerá, exatamente como você espera, apenas com o script em execução. O script será encerrado assim que você fechar o Firefox.

AVISO LEGAL:

Este script é

  1. Não elegante, ele precisa ser executado como um loop infinito em segundo plano.
  2. Requer xdotool, instale-o comsudo apt-get install xdotool
  3. Não funciona para guias, apenas janelas.
Terdon
fonte
solução alternativa agradável
kenn
Obrigado! Não vou iniciar automaticamente, mas iniciar quando o Firefox iniciar. Muito obrigado, vou tentar.
Dusan Milosevic
@terdon Como estou planejando fazê-lo iniciar quando o firefox for iniciado, é possível fazê-lo parar quando o firefox estiver fechado. Talvez algo como: while ["0" -lt "$(xdotool search --name firefox | wc -l)" ]. Não sei se a sintaxe está certa, mas você entendeu ... Você poderia reescrevê-la para atender a essa condição? Obrigado!
Dusan Milosevic
@DusanMilosevic ver resposta atualizada. Eu o reescrevi para que o próprio script inicie o firefox e execute apenas enquanto houver pelo menos uma instância do firefox em execução.
terdon