ubuntuusers.de

Wie Standardausgabe in eine Variable scheiben? Backticks nützen scheinbar nichts.

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Yomi

Avatar von Yomi

Anmeldungsdatum:
25. September 2009

Beiträge: 10

Wohnort: Kiel

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

1
2
3
4
5
#!/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?

dominator

Avatar von dominator

Anmeldungsdatum:
18. März 2008

Beiträge: 90

Wohnort: Meistens im Bierparadies Oberfranken

#!/bin/sh

Sollte das nicht auf die Bash verweisen 💡

schusch

Avatar von schusch

Anmeldungsdatum:
2. September 2008

Beiträge: 324

Wohnort: Berlin

Das openssl Kommando gibt folgendes aus:

MD5(/home/yomi/Skripte/mp3auspdf)=

Kommen evt nicht druckbare Zeichen nach =?. Poste mal die Ausgabe von:

openssl dgst -md5 <Datei deiner Wahl> | od -xc

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

1
2
3
$ md5="$(openssl dgst -md5 /bin/bash | awk '{print $2}')"
$ echo $md5
9c13311b1129132fd37ca6297ef39008

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

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

1
2
3
4
5
#!/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!' }}}

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

dominator schrieb:

#!/bin/sh

Sollte das nicht auf die Bash verweisen 💡

Nein, solange das Skript keine bash-spezifischen Eigenschaften benutzt, kann man /bin/sh benutzen.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

tischbein schrieb:

1
2
3
$ md5="$(openssl dgst -md5 /bin/bash | awk '{print $2}')"
$ echo $md5
9c13311b1129132fd37ca6297ef39008
$ md5="$(openssl dgst -md5 Hallo\ Welt | awk '{print $2}')" 
$ echo $md5
Welt)=

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

diesch schrieb:

tischbein schrieb:

1
2
3
$ md5="$(openssl dgst -md5 /bin/bash | awk '{print $2}')"
$ echo $md5
9c13311b1129132fd37ca6297ef39008
$ md5="$(openssl dgst -md5 Hallo\ Welt | awk '{print $2}')" 
$ echo $md5
Welt)=

Was für eine Shell verwendest du? Davon abgesehen erwartet openssl dgst -md5 eine (existierende) Datei.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

tischbein schrieb:

diesch schrieb:

tischbein schrieb:

1
2
3
$ md5="$(openssl dgst -md5 /bin/bash | awk '{print $2}')"
$ echo $md5
9c13311b1129132fd37ca6297ef39008
$ md5="$(openssl dgst -md5 Hallo\ Welt | awk '{print $2}')" 
$ echo $md5
Welt)=

Was für eine Shell verwendest du?

Das hat nichts mit der Shell zu tun. Wenn der Dateiname Leerzeichen enthält, bekommst du ein falsches Ergebnis, wenn du Leerzeichen als Feldtrenner benutzt.

Davon abgesehen erwartet openssl dgst -md5 eine (existierende) Datei.

$ touch Hallo\ Welt

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

diesch schrieb:

tischbein schrieb:

diesch schrieb:

tischbein schrieb:

1
2
3
$ md5="$(openssl dgst -md5 /bin/bash | awk '{print $2}')"
$ echo $md5
9c13311b1129132fd37ca6297ef39008
$ md5="$(openssl dgst -md5 Hallo\ Welt | awk '{print $2}')" 
$ echo $md5
Welt)=

Was für eine Shell verwendest du?

Das hat nichts mit der Shell zu tun. Wenn der Dateiname Leerzeichen enthält, bekommst du ein falsches Ergebnis, wenn du Leerzeichen als Feldtrenner benutzt.

Achso. Da weiss ich auch nicht weiter, ich benutz awk eher selten für sowas.

Yomi

(Themenstarter)
Avatar von Yomi

Anmeldungsdatum:
25. September 2009

Beiträge: 10

Wohnort: Kiel

Vielen, vielen Dank an euch alle, mann, war ihr fix! 😀

Besonderen Dank an disch, dein Beitrag hat nicht nur funktioniert, sondern hat massgeblich dazu beigetragen, dass ich das Problem an sich verstanden habe! Meine Skripte werden nun in Zukunft besser ☺.

Ich werde mich wohl mit awk noch stärker auseinander setzen. Außerdem werde ich evt. noch einige Andere Hash-Werte mit einbauen und den Skript anschließend in der Rubrik für fertige Nautilusskripte ablegen. (Man will ja nicht nur nehmen, nehmen, nehmen 😉)

→ Problem gelöst.

Antworten |