Come posso chiudere "meno" dall'esterno senza che il mio terminale lasci un casino?


3

Sto scrivendo un'utilità che si avvia automaticamente lesscome sottocomando con il relativo output. Alcune volte si verifica un errore durante la scrittura dell'output e vorrei chiudere automaticamente lesse visualizzare l'errore normalmente. Tuttavia, indipendentemente dal segnale che cerco di inviare al lessprocesso, o lo ignora o si chiude "in modo impuro", cioè lascia il mio terminale inutilizzabile. (Tuttavia, posso risolvere il terminale premendo Ctrl+ Ce scrivendo (alla cieca) il comando stty sane.)

Ho provato tutti i "soliti" segnali: SIGINT, SIGTERM, SIGQUITe SIGKILL. L'ultimo ovviamente non avrebbe funzionato, ma l'ho provato comunque. Non riesco a trovare nulla sui segnali nelle pagine man di less.

È possibile uscire in lessmodo pulito dall'esterno?


Puoi usare un fifo come input per meno end, scrivici una "q" quando vuoi uscire.
Julian F. Weinert,

@ JulianF.Weinert Ma sto già usando lo stdin di less per alimentare il testo. Detto questo, non sono sicuro di quanto meno
riceva l'

E se gli dai una "q"?
Julian F. Weinert,

Risposte:


1

A seconda delle impostazioni di controllo di posti di lavoro, si potrebbe essere in grado di emettere un primo kill -tstpal lessprogramma, quindi una kill -9. Il primo segnale viene catturato lesse lo fa ripristinare tty prima di emettere nuovamente il segnale su se stesso, che normalmente lo fa mettere in pausa in background. Tuttavia, se il gestore predefinito per SIGTSTP lo ignora, lesscontinuerà e imposterà nuovamente il terminale su raw.

Si potrebbe prendere in considerazione l'esecuzione lessin un terminale separato, ad esempio xterm -e sh -c "less /myfile", quindi è possibile kill -9farlo senza necessità di pulizia.

Puoi anche eseguire less --quit-on-intr(o -K) e poi uscirà in modo pulito su SIGINT, anche se questo influenzerà anche la tua normale interazione con il flusso di output.

Altrimenti metti semplicemente stty sane; tput resetdopo il tuo comando kill.

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.