Newsgroup: it.comp.os.linux.development
Titolo: echo e cat: che differenza c'e`?

Crogiolandomi nella mia beata ignoranza, sono stato sempre
convinto che i due comandi:
$ echo qualcosa > pippo
$ echo qualcosa | cat > pippo
producessero esattamente lo stesso risultato.
Adesso devo inviare "qualcosa" ad un dispositivo connesso
alla seriale e
$ echo qualcosa > /dev/ttyS0    NON funziona
$ echo qualcosa | cat > /dev/ttyS0    _funziona_
$ cat file_con_scritto_qualcosa  > /dev/ttyS0    _funziona_
Qualcuno sa spiegarmene il perche'?
C'e` una differenza reale tra questi comandi?
E` un problema legato alla porta seriale?
ciao, Andrea
PS. ho provato a mettere dopo qualcosa i
caratteri di fine riga, ritorno carrello, ...

 E` un problema legato alla porta seriale?
Bella domanda ma visto che da me echo qualcosa > /dev/ttyS0 funziona.......
Lo so, ti ho aiutato poco, probabilmente ho scritto anche qualche 
stupidata, ma almeno non ti sentirai solo:-))
Ciao.
-- 
***  Per E-mail rimuovi ModE dall'indirizzo  ***
  *** Linux user # 198661 --- ICQ 33500725 ***
*** homepage 
http://web.tiscalinet.it/kailed
 ***
            *** Powered by Linux ***

producessero esattamente lo stesso risultato.
E perche', hai mai visto com'e` diverso, da ex, dare:
:r file | grep boh
che non funge, ed invece :r!cat file |grep boh ?
Cmq con echo non c'entrera` la storia di escape? Prova con -e.
D'altra parte [visto che a Daniele va] da certi, echo e` built-in.
-- 
Ci sentiamo  |  Remigio Zedda  || Attenzione! campo "From:" alterato
ciao Remigio |                 ||==> E-mail: 
remi...@tiscalinet.it
-------------|      ..si` d'accordo.. ma con la Deb e` un'altra cosa!
/* Linux 2.2.17 su Debian GNU/Linux 2.2 Potato */

 Da me funziona...
Da me pure.
Nicola.
-- 
______________________________
chi va pian va san e va lontan

 
Posso provarci.
Sarebbe come se echo inviasse "qualcosa" seguito da una newline
(cosi` dice il man) e che il cat ci aggiunga un EOF o qualcosa
di simile che dovrei aggiungere io a mano.
O ti ho capito male?
La cosa strana  e` che i due comandi precedenti mi generano
due file pippo esattamente identici anche leggendoli
in esadecimale.
Con hexedit dovrei vedere anche i caratteri di controllo.
O sbaglio?
ciao, Andrea

 
Non so cosa dirvi, il mio dispositivo deve aver bevuto una
botte di Recioto Amarone, ma col semplice echo non 
reagisce. :-)
Forse ha ragione Remigio e salta qualche carattere di controllo
che a voi non da` problemi, ma a  me si. :-(
ciao, andrea

  -  rimuovi XXX x rispondere
 

 
Ci avevo provato (veramente senza l'opzione -e).
Comunque il man echo dice:
"echo scrive ogni stringa data nello standard  output,  con
uno  spazio  tra l'una e l'altra e va a capo dopo l'ultima
(stampando un newline)."
Magari il mio dispositivo vuole anche un \r o un EOF.
Stassera riprovo con "echo -e ..." 
grazie, andrea

O sbaglio?
Direi anch'io assolutamente si`, ci mancherebbe. Anche da me vengono
tutti uguali e tutti finiscono con new line che io non metto di certo:
echo 'a b c' > abc_echo
echo 'a b c' | cat > abc_echo-cat
vi abc_vi
cat abc_vi > abc_vi-cat
Sono tutti identici tra loro ed uguali a quello che ho messo piu` su.






Invece penso piuttosto alla teoria di Daniele.. prova ad immetterlo
controllando il flusso con dd:
dd if=pippo of=/dev/ttyS0
che ha di default bs=512, e poi allora:
dd if=pippo of=/dev/ttyS0 bs=1
Io purtroppo ho le mani legate ed invece mi affascina. Non ho nessuna
seriale, che le ho disabilitate da bios tutte due. Ho solo il modem
interno che e` ttyS1, ma non ci capisco una mazza coi modem.


 Si` e no.. bisogna vedere se si invia un file di testo o binario.
Il "qualcosa" che devo inviare sulla seriale e` una banalissima
stringa di comando: DMP
Ieri sera ho fatto tutte le possibili prove con echo -e:
echo -e DMP\n
echo -e "DMP\n\r"
echo -e `DMP\f`
.........
e possibili combinazioni di virgolette e caratteri di controllo.
L'unica che ha funzionato e` stata:
echo -e DMP\nDMP\n    #repetita juvant :-)
Mi sono detto: si perde qualcosa all'inizio e gli serve un
ritorno a capo da cui partire "pulito".
Ho provato:
echo -e \nDMP\n
echo -e pippo\nDMP\n
NON funzionano!
Potrebbe essere legato alla lentezza della porta sul dispositivo
(9600baud)?
Ma anche se fosse, perche' cat non risente del problema?
ciao, Andrea
PS. non so se possa servire, ma anche perl si comporta come echo.
Se apro la seriale in lettura riesco a leggere tutto,
se la apro in scrittura un
 open (comando, ">/dev/ttyS0")||die "apertura device $!\n";
 print comando "DMP\n"||die "stampa DMI: $!\n";
 close(comando) || die "chiusura device $!\n";
non funziona. Devo metterci un `echo DMP|cat >/dev/ttyS0`
Non ho ancora provato a ripetere la stringa in perl.

 tutti uguali e tutti finiscono con new line che io non metto di certo:
echo(1) stampa un newline per default, mentre cat non ci pensa neanche.
E' vim che non dovrebbe metterne senza chiedere (un bug?).
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
C isn't that hard: void (*(*f[])())() defines f as an array of 
unspecified size, of pointers to functions that return pointers to 
functions that return void.

 Ma anche se fosse, perche' cat non risente del problema?
Con cat dovrebbe essere la stessa identica cosa. Che sia qualcosa legato
al buffering?
Suggerisco per precauzione un buon esorcismo. :-)
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
Sword fighting is kinda like making love. It's not
always what you do, but what you say.  	-- Captain Smirk


Forse serve un datascope sulla seriale per vedere effettivamente i dati
uscenti.
Hai provato a metterti in ascolto sulla seriale per vedere i dati che
escono .
ciao.
--
Fabio
cinqua...@libero.it

E' vim che non dovrebbe metterne senza chiedere (un bug?).
Da me ho messo Elvis. Dev'essere come dici tu un bug, visto che Mcedit
non lo mette e neanche Ae.
[ERESIA]
Pensavo che gli editor lo mettessero come edit.exe (ma non notepad.exe)
[/ERESIA]
Forse e` una versione vecchia, vediamo:
elvis 2.1_4
Copyright (c) 1995-1999 by Steve Kirkendall
Eresia doppia!! Mette anche \r, che faccio? Forse e` una versione
per winbug? Impossibile perche' era nel cdrom della Debian. :-(((
Bohh, disastro! Lo tolgo? E bellissimo, per il resto:-((


Sorseggiando il suo prosecco Fabio Laghi, si rivolse al NG dicendo...

Mi intrometto :)
Per caso sai come fare per vedere anche i caratteri non stampabili che 
arrivano alla seriale ?
Grazie, Nicola.


Ieri sera ho fatto tutte le possibili prove con echo -e:
Senti, il resto del thread non lo seguo: non so niente sulle seriali.
Pero` volevo dirti: hai provato ad inviare anche con cat da tastiera,
anziche' da file?
D'altra parte con: echo DMP | cat > /dev/ttyS0, possono succedere cose
strane con la pipe.. penso diverse da macchina a macchina. La shell
crea una pipe, forka e redirige lo stdout sull'ingresso della pipe,
forka di nuovo e redirige lo stdin sull'uscita della pipe e lo stdout
su ttyS0: a questo punto puo` o no esserci gia` DMP, dipende dai tempi
del primo fork che ha fatto exec su echo. Se non c'e`, invia prima
niente e poi DMP.


 arrivano alla seriale ?
Il metodo piu' semplice , ma piu' costoso , e' un DataScope Hw.
Un altro e' una vecchia stampante con test in esadecimale di quello che
gli arriva.
Infine prova a cercare , se esiste , un software per linus che abbia la
funzione di datascope .
ciao.
--
Fabio
cinqua...@libero.it

funzione di datascope .
hexdump </dev/ttyS1 
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

 hexdump </dev/ttyS1
Ma sto' hexdump vede tutto? Nel senso non e' che si limiti a convertire in 
hex quello che arriva in ascii perdendosi la roba interessante?


 hexdump </dev/ttyS1
In pratica cosa dovrei fare?
Io non ho mai visto, neanche in foto, un datascope. :-(
Se ho ben capito si tratterebbe di avere un secondo PC Linux,
attaccarlo al primo tramite seriale, lanciare 
hexdump </dev/ttySx dal secondo
e echo qualcosa > /dev/ttySy dal primo
e vedere cosa "raccoglie" hexdump.
Giusto?
Vedo se riesco a procurarmi il tutto e fare una prova.
grazie, Andrea

 Bohh, disastro! Lo tolgo? E bellissimo, per il resto:-((
E perche' mai? Per cosi' poco? E i sorgenti che ci stanno a fare, per
bellezza? :-)
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
 "Software is like sex: It's better when it's free."
                 -- Linus Torvalds, from FSF T-shirt

hex quello che arriva in ascii perdendosi la roba interessante?
E secondo te quale sarebbe, la roba interessante?
I segnali di controllo della seriale? quelli non li puoi vedere altro
che con un datascope.
I caratteri di controllo della seriale(XON-XOFF)? quelli non li vedi con
l'exdump settato sulla stessa seriale che riceve, devi inserire una
macchina con funzioni di datascope, appunto.


Io non ho mai visto, neanche in foto, un datascope. :-(
Beh, un datascope e' un aggeggio che si mette in mezzo ad una
connessione (seriale, in questo caso) e registra cosa sta arrivando da
un lato, lo ripete dall'altro, e vede cosa arriva dall'altro, e cosi'
via.
[pc]<-->[datascope]<-->[modem]
 RX --+---------------- TX
      +---RX(1)
 TX --------------+---- RX
          RX(2)---+
GND --+---------------- GND
      +---GND(1)-GND(2)
Si puo' fare, come dicevo, succhiando i dati tramite le due seriali di
un pc standard, e un apposito software.
Colleghi l'uscita del pc all'RX della com1 del datascope.
Colleghi l'uscita del modem all'RX della com2 del datascope.
Lanci il programma monitor, e a video ( e su file) trovi i caratteri che
passano, separati per interfaccia, e in ordine temporale.
Il gioco con hexdump su una delle due seriali, ha dei limiti, sia per
quello che riguarda eventuali caratteri di protocollo, sia per quanto
riguarda la non gestione temporale del protocollo tra DUE
apparecchiature.


 
In pratica io voglio vedere se viene fuori questa roba sul pc collegato 
all'altra seriale:
/* variabili e costanti */
#define STX      0x02 
typedef unsigned char  uchar;   
/* definizione di buffer */ 
uchar buffer[10];
/* invio dati */
buffer[0]=STX;                             /* Trasmetti STX */
write(modem,buffer,1); 
Altrimenti vuol dire che il baco sta' prima di questa roba.


 Oppure un datascope software, basta avere un secondo pc da collegare.
Si e' corretto . Comunque con emulatori sw ho sempre avuto qualche
problema .
E se devi controllare il flusso dei dati in tutti e due i sensi credo
che l'unico sia quello Hw.
ciao.
--
Fabio
cinqua...@libero.it

 Giusto?
Forse potresti provare anche con lo stesso Pc .
L'importante e' avere 2 seriali disponibili .
ciao
--
Fabio
cinqua...@libero.it

 
Mmmmh.
Quanto costa un data-scope?
C'e` la possibilita` di trovarli a noleggio?
Credo che dovro` accontentarmi di quello che ricavo da
un tentativo software.
ciao, andrea

Altrimenti vuol dire che il baco sta' prima di questa roba.
Allora, se non hai problemi di handshake hardware-software, anche con
l'hexdump lo devi vedere.


che l'unico sia quello Hw.
Hai ragione, ma quello hardware puo' anche essere un portatile
superobsoleto come uso io, con un programmino ad hoc.
L'importante e' che NON faccia da bridge, ma solo da sniffer, e che sia
abbasdtanza veloce con le seriali.
A quel punto, e' solo questione di avere un ottimo polling sulle seriali
per vedere il flusso correttamente incolonnato come sviluppo nel tempo.


C'e` la possibilita` di trovarli a noleggio?
Non ne ho idea.
Ti consiglio di provare a cercare DLM[*], e sfruttare un qualsiasi pc
con due seriali e un dos dal 3.3 in avanti, con un cavetto che ti puoi
fare anche da solo (se tu fossi dalle mie parti, potrei prestarti il
tutto)
Con quello riesci a tenere sotto controllo la comunicazione.
Pagando una manciata di dollarucci[**], puoi avere anche la versione che
registra su file il traffico.
[*] Se non lo trovi al volo, te lo posso inviare in mail, sono poche
decine di k, e la versione che non salva su file e' liberamente usabile,
da quel che so, almeno come test.
[**]Non a me, ai canadesi che hanno programmato il monitor.


 fare anche da solo .....
cos'e` un semplice cavo seriale-seriale che si trova anche in un 
negozio o ha qualche "scambio" particolare o qualche dispositivo
in mezzo?
Forse, pero` dovrei trovare il modo di connetterlo con quello
descritto in:
http://www.geocities.com/SiliconValley/Haven/5371/indexe.html
che poi attacco alla seriale.
Quindi, puoi dirmi a che poli della seriale devo connettere i
Tx, Rx e GND del connettore jack ?
ciao e grazie, andrea

che poi attacco alla seriale.
Adesso ci vado a vedere...
Secondo me, non serve a nulla,a a meno che tu non abbia proprio quel
misuratore.
ti faccio l'elenco dei piedini da collegare:
4 connettori 9 pin:
connettore 1) uscita del primo pc in esame
connettore 2) uscita del secondo pc in esame (o altra apparecchiatura,
ma la piedinatura te la indico come fosse un altro pc.
connettore 3) com1 del pc-monitor
connettore 4) com2 del pc-monitor
Tutti i pin 5 collegati tra loro (massa segnale)
Pin 3 connettore 1 al pin 2 connettore 3 e al pin 2 connettore 2
Pin 2 connettore 1 al pin 2 connettore 4 e al pin 3 connettore 2
eventuali altri segnali da conn.1 a conn.2 restano fuori da questa
storia (dsr, dtr, insomma, i pin per l'handshake hardware) e vanno
lasciati collegati come sarebbero se non inserissi in mezzo il monitor.
Anzi, per tagliare la testa al toro:
Prendi il cavo che gia' funziona, apri uno dei due connettori, e
colleghi tre fili a: pin di massa (5 se a 9 pin, 7 se a 25) e i pin 2 e
3, senza interromprei collegamenti precedenti.
La massa la porti ad entrambi i connettori del pc-monitor, gli altri
due, uno al pin 2 della COM1, uno al pin 2 della COM2. 


 l'hexdump lo devi vedere.
Ok, allora cerco il bachetto nel programma :)


 in mezzo?
Scusate, non e' che basta quell'affare con le lucette che si accendo e che 
si attacca alla seriale alla modica cifra di 40-50 mila lire?
P.S. (io ne ho uno e solo che si accendono le luci ... ma non capisco 
a cosa servono ;-))


bellezza? :-)
Si`, buona notte! Ne ho da magna' pagnotte prima di saper mettere le
mani sui sorgenti :-(


 misuratore.
In effetti, tutto il problema nasce dal fatto che voglio fare un 
programmillo perl per leggere e gestoire i dati di quel misuratore 
da Linux.
Quindi, tutto quello che mi interessa deve passare da quel connettore
un po' particolare, oltre che dalla seriale.
In realta` ho un connettore similare, prodotto dalla casa produttrice
del misuratore. Diciamo: quello ufficiale.
Io, quindi, devo assicurarmi che i messaggi escano giusti dalla
seriale e poi non vengano maltrattati da quel connettore.
Almeno, che il "maltrattamento" sia omogeneo con cat, echo e perl.
Adesso, cerchero` di mettere in pratica le tue indicazioni.
Anche se non sono molto esperto in elettrotecnica, mi sono
sembrate abbastanza chiare.
ciao e grazie, andrea

si attacca alla seriale alla modica cifra di 40-50 mila lire?
Beh, quello e' un data tester, per alcuni problemi puo' servire, ma non
ci riesci ad analizzare il traffico, vedi solo se i segnali di controllo
dell'handshake hardware ci sono, e se c'e' passaggio di dati.
Ma non riuscirai mai a sapere COSA passa per la seriale.
