linux user group brescia

immagine del castello

Archivio della mailing list

Inviare output a tty da un processo lanciato da Cron

Gabriele Villi gvilli a iol.it
Mer 11 Ott 2000 07:36:03 UTC

Luca Coianiz wrote:
> 
>     Ciao a tutti,
> 
>  Spero non sia la solita domanda "da newbie" ma... come si fa a mandare
> dell'output (segnalazioni e, potendo, "bells") da un processo che gira
> (immagino) in background "al terminale tty che sto visualizzando in questo
> momento" ?
> 
 comunque, anche se lo facesse, può sempre essere che io non
> stia visualizzando QUEL tty (per cui dovrei poter indirizzare "il tty
> corrente").
> 

unix e' un sistema per sua natura multiutente e il fatto che una sola
persona (tu) lo stia usando in un dato momento non fa alcuna differenza
dal punto di vista del sistema operativo. Analogamente il fatto che
tanti terminali logici siano in realta' lo stesso terminale fisico, non
importa alcunche' al sistema.
Pensa ad essere in una situazione in cui hai effettivamente tanti
terminali distinti (diciamo 8) e su ognuno di essi 8 persone distinte
effettuano il login. Alcuni utenti potrebbero usare lo stesso username
(diciamo 3 luca, 2 mario, 1 pippo ed 1 pluto). Tu vuoi chiedere al
sistema "manda l'output sul terminale che sto usando io". Che cosa vuol
dire? Se sei "loggato" come luca, come fa il sistema a distinguere te
dagli altri 2? 

Quello che puoi fare e' mandare un messaggio a chiunque sia "loggato"
con un certo username (ad esempio con il comando write) ma nel tuo caso
significa che il messaggio ti compare probabilmente su piu' tty e non
solo su quella che stai fisicamente usando. Oppure potresti esaminare
l'output del comando w e in base al tempo di inattivita' selezionare una
sola tty. Ovviamente in questo caso se stati vedendo un terminale senza
pero' immetter dati quel terminale risulta idle al pari degli altri e
quindi capire di inviare il messaggio proprio a quel terminale secondo
me e' una impresa ardua.

A maggior ragione, tieni anche presente che se sei in X potresti aver
lanciato diversi xterm, ognuno dei quali diventa a tutti gli effetti un
tty (almeno su solaris ed aix, se ben ricordo), tutti assiciati allo
stesso user name. 

Nel tuo caso specifico io opterei per inviare un msg ad un utente
(indipendentemente dalla tty), oppure un messaggio di posta elettronica
(ed in quel caso il sistema ti avvisa quando arriva un nuovo messaggio)
oppure vedrei se riesco a combinare qualcosa con la variabile
PROMPT_COMMAND di bash che ti permette di specificare un comando da
eseguire prima di ogni prompt (cioe' in pratica quasi ogni volta che
premi invio in una tty). Tieni presente pero' che quest'ultimo
trucchetto e' assolutamente non portabile (non credo che funzioni con
csh o altre shell). Io non dove linux tenga traccia di quale terminale
virtuale sia attualmente visualizzata sul monitor, ma non credo che sia
una buona idea basarsi su questo meccanismo; primo perche' credo che non
sia  per niente portabile e poi perche' magari capita che lo script vada
a vedere quel valore proprio una frazione di secondo prima che tu passi
ad un'altra tty, col risultato che il messaggio verrebbe stampato su una
tty che non e' quella che ti interessa.


ciao.
gv



Maggiori informazioni sulla lista Lug