Yomi schrieb:
Ich will mir mittels eines kleinen Naulius-Skriptes per Zenity den md5-Wert einer angeklickten Datei ausgeben lassen. Vorher hatte ich das umständlich mit einer temporären Datei und gedit gelöst:
#!/bin/bash
openssl dgst -md5 -out /tmp/md5.out ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS};
gedit /tmp/md5.out;
Das wurde mir aber zu umständlich jedesmal gedit offen zu haben und daher habe ich mich nach Studiums der wichtigen Artikel im Wiki an Zenety rangewagt. Folgendes Skript
| #!/bin/sh
MD5=`openssl dgst -md5 ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}`
zenity --info --text 'Der md5-Hash: '$MD5'\n' --title 'Das Ergebnis!'
|
gibt mir als angezeigten Text nur
Der md5-Hash: MD5(/home/yomi/Skripte/mp3auspdf)=
aus. Ich habe stundenlang alle möglichen ", `, ' und $() Einschübe durchprobiert und bin langsam am Verzweifeln. Wo liegt der Fehler, es ist doch eigentlich ein einfaches Skript?
Die Ausgabe von openssl sieht z.B. so aus:
MD5(/home/yomi/Skripte/mp3auspdf)= b92c592d42eb63c0f55062e6ec6df621
Zenity wird dann als
zenity --info --text 'Der md5-Hash: 'MD5(/home/yomi/Skripte/mp3auspdf)= b92c592d42eb63c0f55062e6ec6df621'\n' --title 'Das Ergebnis!'
aufgerufen. Das Argument für --text endet nach dem ersten ungeschützen Leerzeichen, ist also
Der md5-Hash: 'MD5(/home/yomi/Skripte/mp3auspdf)=
Es ist in Shell-Scripts eigentlich immer eine gute Idee, Variablen usw. immer mit "" zu quoten, solange du nicht sicher bist, dass das unerwünscht ist.
#!/bin/sh
MD5="`openssl dgst -md5 ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}`"
zenity --info --text "Der md5-Hash: $MD5\n" --title 'Das Ergebnis!'
Ich benutze üblicherweise $() statt (das lässt sich bei Bedarf schachteln und ist übersichtlicher, finde ich).
Die Anzeige wird ein bisschen schöner, wenn du den überflüssigen Kram der Ausgabe von openssl weglässt, z.B.
{{{
#!/bin/sh
MD5="$(openssl dgst -md5 ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}|awk -F '.*= ' '{print $2})"
zenity --info --text "Der md5-Hash: $MD5\n" --title 'Das Ergebnis!'
}}}