Seite 1 von 1

Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 14:20
von bunter fisch
Mahlzeit,

ich habe für mein Problem aktuell kein Beispielscript. Angenommen ich lasse eine Audiodatei mit ffmpeg umwandeln:

Code: Alles auswählen

ffmpeg -i input -ab 160k output
Ich könnte jetzt mit Zenity und der Dateiauswahl die Inputdatei und den Ausgabeordner wählen. Drücke in dem Auswahldialog auf "OK" setzte Zenity die Auswahl in das Script ein. Gehe ich aber auf "Abbrechen" wird nichts eingesetzt, das Script aber dennoch ausgeführt. Im o.g. Fall macht das nichts, kann aber auch in anderen Konstellationen blöd sein. Wie biege ich das so zurecht, dass er wenn ich "Abbrechen" im Datei-/Ordnerauswahldialog drücke, das Script überhaupt nicht startet?

Hab auch für yad nichts gefunden, das nutze ich aber nicht. Ich bin mit Zenity immer schneller zum Ziel bekommen.

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 17:28
von abgdf
bunter fisch hat geschrieben:
2. Mär 2018, 14:20
ich habe für mein Problem aktuell kein Beispielscript.
Dann schreib' doch mal eins und poste es. Dann wäre es für uns leichter, Dein Problem nachzuvollziehen.

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 17:51
von josef-wien
https://de.wikipedia.org/wiki/Zenity hat geschrieben:Zenity [ˈzenətɪ] ist ein plattformunabhängiges Programm, das es erlaubt, GTK-Dialoge von der Kommandozeile oder von Shell-Skripten aus zu starten.
Ich sehe nicht, daß ffmpeg in diese Definition fällt, aber wenn es wichtig ist, daß die von wem auch immer an ein Skript (oder jedes andere Programm) übergebenen Daten stimmen, dann ist die Plausibilität dieser Daten bzw. das Vorhandensein von Dateien oder Verzeichnissen zu prüfen, bevor mit der eigentlichen Verarbeitung begonnen wird.

P. S. Ich kenne "Zenity" nicht, aber vielleicht fällt Deine Beobachtung in die Kategorie "It is a feature, not a bug.".

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 18:33
von bunter fisch
Zum Beispiel das hier

Code: Alles auswählen

ffmpeg -i input.mp3 "$(zenity --file-selection --directory='/home/fisch/')"/output.mp3
Wähle ich einen Ordner aus wird die Output-Datei in diesen Ordner geschrieben, gehe ich auf Abbrechen wird die Datei in den Ordner der Input-Datei geschrieben.

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 19:50
von abgdf
Du führst ffmpeg ja auch unbedingt aus, und nicht nur dann, wenn zenity etwas liefert.
Mach' das so:

Code: Alles auswählen

#!/bin/bash

a=$(zenity --file-selection --directory --filename='/home/fisch')
if test -n "$a"
then
    echo "Doing something with ffmpeg $a"
else
    echo "Doing nothing."
fi

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 2. Mär 2018, 21:05
von susejunky
Hallo bunter fisch,
bunter fisch hat geschrieben:
2. Mär 2018, 18:33
Zum Beispiel das hier

Code: Alles auswählen

ffmpeg -i input.mp3 "$(zenity --file-selection --directory='/home/fisch/')"/output.mp3
Wähle ich einen Ordner aus wird die Output-Datei in diesen Ordner geschrieben, gehe ich auf Abbrechen wird die Datei in den Ordner der Input-Datei geschrieben.
In Ergänzung zu dem was abgdf bereits gesagt hat, hier noch zwei Beispiele (die Du in der Befehlszeile einer Konsole ausführen kannst), die zeigen welche Rückgabewerte Du auswerten kannst:

Code: Alles auswählen

> A="X";A=`zenity --file-selection --directory="~"`; echo "Returncode: $? Auswahl: >$A<" 
Returncode: 0 Auswahl: >/home/user/ausgewähltes_Verzeichnis<
>
Zunächst wird die Variable A mit "X" vorbelegt. Dann wird "zenity" aufgerufen. Das Verzeichnis "/home/user/ausgewähltes_Verzeichnis" wird ausgewählt und der Dialog mit "OK" beendet. Dadurch wird das ausgewählte Verzeichnis in der Variablen A und der Returncode des Aufrufs von "zenity" in der Variablen $? gespeichert. "echo" gibt dann die beiden Variablen aus.

Code: Alles auswählen

> A="X";A=`zenity --file-selection --directory="~"`; echo "Returncode: $? Auswahl: >$A<" 
Returncode: 1 Auswahl: ><
>
Zunächst wird die Variable A mit "X" vorbelegt. Dann wird "zenity" aufgerufen. Der Dialog wird mit "Abbrechen" beendet. Ob ein Verzeichnis ausgewählt wurde oder nicht ist dabei nicht von Bedeutung. Dadurch wird "" in der Variablen A und der Returncode des Aufrufs von "zenity" in der Variablen $? gespeichert. "echo" gibt dann die beiden Variablen aus.

Viele Grüße

susejunky

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 3. Mär 2018, 01:35
von abgdf
Wenn Du's unbedingt in einer Zeile haben willst, kann man Dein Beispiel
bunter fisch hat geschrieben:
2. Mär 2018, 18:33

Code: Alles auswählen

ffmpeg -i input.mp3 "$(zenity --file-selection --directory='/home/fisch/')"/output.mp3
auch so machen:

Code: Alles auswählen

a=$(zenity --file-selection --directory --filename='/home/fisch');if test -n "$a";then ffmpeg -i input.mp3 "$a/output.mp3";fi

Re: Script beim drücken auf Abbrechen in Zenity nicht ausführen

Verfasst: 3. Mär 2018, 22:06
von bunter fisch
@ abgdf

So gehts. Simple, wenn man einmal die Idee sieht. Wieso man da selber nicht drauf kommt :irre: