Come chiudo una nuova finestra di Firefox dal terminale?


10

Ho più istanze di Firefox in esecuzione su Ubuntu 14.04. Come posso chiudere la finestra / istanza aperta più di recente dal Terminale?

Ho provato a utilizzare l'alias cfct definito in una risposta a una domanda correlata , ma non ha funzionato.


@chaos Presumo che OP significhi finestre, non tabulazioni
Jacob Vlijm,

@JacobVlijm che la risposta chiude anche Windows e mi sembra l'unica soluzione. Poiché firefox esegue un solo processo, indipendentemente dal numero di finestre aperte, è necessaria tale soluzione nel diario. killall firefoxsarebbe SIGTERMl'intero processo, non solo una finestra.
caos

@chaos Non sono d'accordo, molto bene possibile, non sono a casa, vedi se sono abbastanza veloce da produrre una risposta nella mia pausa :)
Jacob Vlijm,

1
@chaos I duplicati sono per quando le domande sono uguali, non le risposte. Alcune sovrapposizioni sono inevitabili.
Seth,

Che cos'è cfct? Le ricerche restituiscono principalmente questa domanda.
TRiG

Risposte:


13

Per creare un comando che trova l' idultima finestra, creata da Firefox(e per chiuderla), dovrai wmctrlinstallare:

sudo apt-get install wmctrl

Il comando

Quindi utilizzare il comando:

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


Spiegazione:

wmctrl -l

elenca tutte le finestre, ma un'importante proprietà del comando è che elenca le finestre nell'ordine in cui sono state create .

Perciò:

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

volere:

  • elenca tutte le finestre:

    wmctrl -l
    
  • trova quelli (le righe) con "Mozilla Firefox" nel loro nome:

    grep 'Mozilla Firefox'
    
  • trova l'ultimo (che è anche l'ultimo creato):

    tail -1
    
  • estrarre la prima stringa nella riga (che è la finestra -id):

    awk '{ print $1 }'
    

Il comando:

wmctrl -ic

ucciderà quindi la finestra di Firefox più recente con il suo ID (con grazia).

O ancora più affidabile:

Mentre il comando di cui sopra funziona bene in quasi tutti i casi, v'è una piccola possibilità di nome scontri, se ad esempio un altro finestra esiste con "Mozilla Firefox" nel suo nome, ma non di una finestra da Firefox(improbabile, ma ancora).

Ciò che dovrebbe funzionare "waterproof" è quindi identificare le finestre nell'elenco delle finestre (usando wmctrl -lp) tramite il pid di firefox, anziché la stringa nel nome della finestra:

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

Come puoi vedere, in questo comando,

wmctrl -l | grep 'Mozilla Firefox'

producendo le righe contenenti "Mozilla Firefox", è sostituito da:

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

producendo le righe contenenti il ​​pid di firefox (come output di pgrep firefox)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.