Newsgroup: it.comp.os.linux.iniziare
Titolo: mettere un file (testo o binario) in una variabile

Salve.
ho creato un file di testo (prova.txt)
1
2
3
4
il suo md5 è 302c28003d487124d97c242de94da856
ho provato a metterlo in una variabile:
A="`cat prova.txt`"
ho riprovato l'md5
echo "$A"|md5sum
e funziona.
ora vorrei fare la stessa cosa con un file binario (prova.bin) il cui
md5 è
cd7ee9d0a124df846ac8e1304c2de710
stessi passi di cui sopra
A="`cat prova.bin`"
echo "$A"|md5sum
fa74f92606245e192bee032733983c0e
il file viene alterato. idem con il -n
echo -n "$A"|md5sum
7e5bdc213728365077592cd3d9017e2f
Al di là del tipo di utilizzo che ci si può fare, è fattibile la cosa?
Matteo

 Al di là del tipo di utilizzo che ci si può fare, è fattibile la cosa?
Non credo, ma qualcuno potrebbe smentirmi.
Ciao,
David
-- 
 . ''`.  Debian maintainer |  
http://snipurl.com/qa_page
 : :'  :  Linuxer #334216  |  
http://www.hanskalabs.net/
 `. `'`    GPG: 1392B174   | 
http://www.debianizzati.org/
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174


la soluzione non mi piaccia ma l'ostacolo si può superare così:
$ md5sum prova.bin
cd7ee9d0a124df846ac8e1304c2de710  prova.bin
$ A="`cat prova.bin |uuenpipe`"
$ echo "$A"|uudepipe |md5sum
cd7ee9d0a124df846ac8e1304c2de710  -
Matteo

 cd7ee9d0a124df846ac8e1304c2de710  -
Uh, bello :)
Ma... posso chiederti a che ti serve? :)



al di là degli esperimenti, ho bisogno di fare diverse operazioni di
creazione e manipolazione di file binari (per la cronaca il prova.bin
è il gzip di prova.txt ;-), lanciati da script su macchine remote e
rielaborati in locale ecc, e vorrei evitare al massimo il numero di
file temporanei, se non eliminarli del tutto.
Matteo

 file temporanei, se non eliminarli del tutto.
File temporanei?
Ma se invece di fare:
A=$(cat foo.bin | uuenpipe)
echo $A | uudepipe | md5sum
facessi direttamente:
echo $(md5sum foo.bin)
?
(nota: $() è equivalente a ``)
Risparmieresti anche qualche riga di codice :)


 Risparmieresti anche qualche riga di codice :)
Oltre a un po' di tempo:
---8<---
$ ls -lah gthumb_2.10.8-1_i386.deb 
-rw-r--r-- 1 neo neo 646K 2008-01-04 15:06 gthumb_2.10.8-1_i386.deb
$ time md5sum gthumb_2.10.8-1_i386.deb 
21dbee44cd0f372b979a98278beb3d7b  gthumb_2.10.8-1_i386.deb
real	0m0.031s
user	0m0.008s
sys	0m0.000s
neo@pingu:/deb/rep/build-area$ time (cat gthumb_2.10.8-1_i386.deb | uuenpipe |
uudepipe | md5sum) 21dbee44cd0f372b979a98278beb3d7b  -
real	0m0.075s
user	0m0.036s
sys	0m0.016s
$ ls -lah gthumb-data_2.10.8-1_all.deb 
-rw-r--r-- 1 neo neo 2,1M 2008-01-04 15:05 gthumb-data_2.10.8-1_all.deb
$ time md5sum gthumb-data_2.10.8-1_all.deb 
5718b52a754040d54b19e5305615c284  gthumb-data_2.10.8-1_all.deb
real	0m0.115s
user	0m0.012s
sys	0m0.000s
$ time (cat gthumb-data_2.10.8-1_all.deb | uuenpipe | uudepipe | md5sum)
5718b52a754040d54b19e5305615c284  -
real	0m0.219s
user	0m0.120s
sys	0m0.020s
$
--->8---
Immagino che con file grandi si possa perdere molto tempo in più con le pipe.


 e funziona.
No, cosi' non funziona perche' echo emette un \n spurio alla fine che viene
conteggiato da md5sum. Devi fare echo -n oppure, meglio, md5sum < file.
Altro difetto di echo: se $A inizia con un "-" viene preso per opzione,
quindi meglio printf "%s" "$A" | md5sum.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it