PDA

View Full Version : [BASH] Terminale interattivo


PinkNoiser
26-11-2008, 16:32
Buona sera a tutti :). Stavo provando, per gioco e per mettere in pratica quel poco che ho imparato sullo scripting in bash, a costruire una piccola chat.
Lasciando da parte tutto il resto, il nucleo della cosa è semplice:
- un read prende quello che viene scritto da tastiera e lo aggiunge a un file in append
-un altro script fa senza sosta: cat del file -> 0.2secondi di attesa ->clear e riparte

Ora, tutto funziona molto bene (anche con un bell'aspetto finale). L'unico problema è che per far funzionare questi due script (read e write) devo far aprire due terminali.

Ora chiedo: c'è un modo per far si che sial il cat continuo che il read (che attende l'invio, ovviamente) girino nella stessa finestra del terminale?
Del tipo un tput cup con sopra i messaggi e l'ultima riga invece pronta in attesa per scrivere? Oppure semplicemente non si può e devo rassegnarmi ai due terminali?

PinkNoiser
28-11-2008, 14:26
Ok siete crudeli e non volete rispondere a una seppur semplice domanda... almeno ditemi se ho postato nella sezione giusta o se era meglio lo facessi in linux

banryu79
28-11-2008, 15:57
Ok siete crudeli e non volete rispondere a una seppur semplice domanda...

A mia discolpa ti dico che non ho risposto perchè non avevo niente da dire in merito non sapendo fornire una valida risposta alla tua domanda in un senso o nell'altro: sai com'è, di solito se non so una cosa è difficile che possa dare un aiuto...

Magari è lo stesso per tutti gli altri utenti che hanno letto il thread, tanti potrebbero non averlo ancora letto.

In sostanza non si tratta di crudeltà; qui, di solito, rispondiamo più o meno a tutti.

PinkNoiser
01-12-2008, 22:30
Ciao banryu, in effetti l'aggettivo "crudele" era piuttosto ironico..
Solo che è strano che tanta gente che da quello che ricordo ne sa veramente tante non riesce a rispondere a questo mio semplice dubbio.
Dici che è meglio se provo a scrivere nella sezione linux, o chiedo di essere spostato?

banryu79
02-12-2008, 08:21
Dici che è meglio se provo a scrivere nella sezione linux, o chiedo di essere spostato?

Non so se l'argomento è da Sezione Linux: non la frequento.
Se lì non sei off topic prova a postare lì.
Altrimenti vieni qui a fare un up ogni giorno, prima o poi qualche linuxiano esperto con qualcosa da dire al rigurado passerà...

sasa83
02-12-2008, 11:28
Buona sera a tutti :). Stavo provando, per gioco e per mettere in pratica quel poco che ho imparato sullo scripting in bash, a costruire una piccola chat.
Lasciando da parte tutto il resto, il nucleo della cosa è semplice:
- un read prende quello che viene scritto da tastiera e lo aggiunge a un file in append
-un altro script fa senza sosta: cat del file -> 0.2secondi di attesa ->clear e riparte

Ora, tutto funziona molto bene (anche con un bell'aspetto finale). L'unico problema è che per far funzionare questi due script (read e write) devo far aprire due terminali.

Ora chiedo: c'è un modo per far si che sial il cat continuo che il read (che attende l'invio, ovviamente) girino nella stessa finestra del terminale?
Del tipo un tput cup con sopra i messaggi e l'ultima riga invece pronta in attesa per scrivere? Oppure semplicemente non si può e devo rassegnarmi ai due terminali?

potresti mettere read e cat dentro un while e separarli....
ad esempio così:
#!/bin/bash

var=0
limit=10

while [ "$var" -lt "$limit" ]

do

#####quì il cat

read riga

####quì il read`

done

echo

exit 0

potrebbe funzionare?

PinkNoiser
02-12-2008, 18:29
potresti mettere read e cat dentro un while e separarli....
ad esempio così:
potrebbe funzionare?

è la prima cosa che ho provato a fare,ma cosi non funziona. Spiego
Il cat voglio sia fatto ripetutamente con uno sleep variabile (di default imposto 0.2 secondi, cioè la finestra che legge il file della chat viene clearata e vieni rifatto un cat 5 volte al secondo.
ma se metto
-->
|clear
|read
|cat
|sleep
---<e ricomincio
il read viene aggiornato come il cat quindi è impossibile scrivere qualcosa il 0.2 secondi :D

Come proponi tu
-->
|clear
|cat
|read
---<e ricomincio
funziona..ma per vedere un aggiornamento della chat bisogna scrivere qualcosa altrimenti la finestra resta ferma..

Ho provato anche con tput cup sperando di poter fare cat e clearare solo una parte dello schermo, ma un po perchè probabilmente non sono capace, ma non ha funzionato..non so in che altro modo fare..

"semplicemente" a me servirebbe che nella finestra terminale siano eseguiti due comandi contemporaneamente, e mi sa che questo non è possibile, e è questo che ero curioso di sapere..
Ho visto programmi girare su terminale che "forse" facevano una cosa del genere, ma mai con un comando interattivo come il read.

PS: si lo so, non è per queste cose non si fanno con script, ma è per questo che ci voglio provare:D

PinkNoiser
11-12-2008, 14:32
:stordita: