Jak wykonać polecenie terminalu za każdym razem, gdy okno Firefoksa zamyka się

8

Muszę wykonać to:

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

za każdym razem, gdy okno Firefox się zamyka. Ale niekoniecznie po zamknięciu wszystkich okien, ale przy każdym zamkniętym oknie. Na przykład, jeśli mam jedno okno Firefox i jedno okno podręczne Firefox. Jeśli zamknę co najmniej jedno okno, chcę wykonać to polecenie. czy to możliwe? Dzięki!

Dusan Miloszević
źródło
1
Dlaczego chcesz to zrobić? Najprawdopodobniej łatwiej byłoby rozwiązać problem, niż stosując takie obejście. Jakiej wersji Pipelight i wine-compholio używasz?
Michael Müller,
Podążałem za tym czcicielem. jest w języku serbskim, ale w opisie zastosowano kody.
Dusan Milosevic
Jest to jedna z usług serbskiej firmy szerokopasmowej, która nie jest oficjalnie obsługiwana w systemie Linux.
Dusan Milosevic

Odpowiedzi:

11

Jedyny sposób, w jaki mogę myśleć, to niezbyt elegancki. Możesz uruchomić skrypt działający w tle, który zlicza liczbę otwartych okien Firefoksa na sekundę i uruchamia polecenie, jeśli ta liczba się zmieni. Coś jak:

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

Zapisz skrypt powyżej jako firefox, umieść go w swoim ~/binkatalogu i uruchom go chmod a+x ~/bin/firefox. Ponieważ Ubuntu dodaje ~/bindo twojego $PATHdomyślnie i dodaje go przed innymi katalogami, uruchomienie firefoxspowoduje uruchomienie tego skryptu zamiast normalnego pliku wykonywalnego Firefoksa. Teraz, ponieważ skrypt jest uruchamiany /usr/bin/firefox, oznacza to, że Twój normalny firefox pojawi się, tak jak się spodziewasz, tylko z uruchomionym skryptem. Skrypt zakończy działanie, gdy tylko zamkniesz Firefoksa.

ZRZECZENIE SIĘ:

Ten skrypt jest

  1. Nie elegancki, musi być uruchamiany jako nieskończona pętla w tle.
  2. Wymaga xdotool, zainstaluj zsudo apt-get install xdotool
  3. Nie działa w przypadku kart, tylko okna.
terdon
źródło
fajne obejście
kenn
Dzięki! Nie uruchomię go automatycznie, ale raczej uruchomię go, gdy uruchomi się Firefox. Dziękuję bardzo, spróbuję.
Dusan Milosevic
@terdon Ponieważ planuję uruchomić go, gdy uruchomi się Firefox, czy mogę go zatrzymać, gdy Firefox zostanie zamknięty. Może coś takiego: while ["0" -lt "$(xdotool search --name firefox | wc -l)" ]. Nie wiem, czy sintax ma rację, ale masz rację ... Czy możesz przepisać go, aby spełnić ten warunek? Dzięki!
Dusan Milosevic
@DusanMilosevic zobacz zaktualizowaną odpowiedź. Przepisałem go tak, aby sam skrypt uruchomił firefoxa i działał tylko tak długo, jak działa co najmniej jedna instancja firefoxa.
terdon