Relative Pfadangaben bei Service Menüs

KDE, Gnome, Windowmanager, X11, Grafiktreiber und alles was dazu notwendig ist. Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Relative Pfadangaben bei Service Menüs

Beitrag von Richard » 03.02.2018 10:21:06

Hi,

ich möchte gerne in ein Service Menü um PDF-Dateien in Bilder zu extrahieren den Unterordner abfragen und ggf. erstellen lassen. Dazu habe ich dieses Yad-Script erstellt, welches auch geht:

Code: Alles auswählen

yad --title="Field Optionen" --form --item-separator=, --separator=" " --field="Ausgabeordner:DIR" --field="Neuen Ordner erstellen:CDIR"
Das hab ich dann in ein Script zum extrahieren der PDF eingefügt

Code: Alles auswählen

convert -density 200x200 -units pixelsperinch %F -compress jpeg +adjoin "yad --title="Field Optionen" --form --item-separator=, --separator=" " --field="Ausgabeordner:DIR" --field="Neuen Ordner erstellen:CDIR"/%F.jpg"
Ich dachte dann wird Yad geöffnet und eine neuer Ordner erstellt der dann als Output genutzt wird. Yad öffnet sich zwar, aber es werden keien Dateien ausgegeben. Auch wenn ich den Ordner direkt angebe - ohne yad - geht es nicht. Wenn der Ordner 'neu' heißt sieht das so aus

Code: Alles auswählen

convert -density 200x200 -units pixelsperinch %F -compress jpeg +adjoin "neu/%F.jpg"
Wie müsste ich das eingeben damit das Service Menü mit relativen Pfaden - also ausgehend vom Speicherort der PDF-Datei - funktioniert? Ist mein Vorgehen mit Yad so überhaupt richtig?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Relative Pfadangaben bei Service Menüs

Beitrag von Cae » 04.02.2018 08:57:18

Dein verschachteltes Quoting ist kaputt, wodurch yad schliesslich mit den Optionen

Code: Alles auswählen

--field=Neuen
Ordner
erstellen:CDIR/123.jpg
aufgerufen wird (Newlines zur Verdeutlichung der einzelnen Argumente). Du vermeidest das, indem du entweder die inneren Quotes zu \" escapst oder (besser) die aeusseren Quotes durch Ticks ' ersetzt.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Relative Pfadangaben bei Service Menüs

Beitrag von Richard » 05.02.2018 18:59:18

Was meinst du mit inneren Quotes? Die " vor und nach yad? Hab jetzt mal das hier versucht:

Code: Alles auswählen

convert -density 200x200 -units pixelsperinch %F -compress jpeg +adjoin 'yad --title="Field Optionen" --form --item-separator=, --separator=" " --field="Ausgabeordner:DIR" --field="Neuen Ordner erstellen:CDIR"/%F.jpg'
Geht aber auch nicht, da kommt
convert: unable to open image `DIR" --field="Neuen Ordner erstellen:CDIR"/neu-0.jpg': Datei oder Verzeichnis nicht gefunden @ error/blob.c/OpenBlob/2712.
und yad wird nicht aufgerufen. Gehe ich den anderen Weg, die " um yad lassen und die darin durch \" ersetzen kommt das gleiche.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Relative Pfadangaben bei Service Menüs

Beitrag von Cae » 06.02.2018 12:22:26

Ah, sorry, ich hatte uebersehen, dass convert kein Wrapper wie beispielsweise timeout ist, welches verbleibende Argumente einfach ausfuehrt. Was du dagegen machen willst, nennt sich "command substitution", was mit $() geht:

Code: Alles auswählen

$ echo foo
foo
$ echo bar "echo foo"
bar echo foo
$ echo bar "$(echo foo)"
bar foo
$ 
Das echo foo ist dein yad mit Argumenten, das echo bar der convert-Aufruf.

Der Hinweis auf inkonsistentes Quoting ist dennoch zutreffend, hier wurde ich

Code: Alles auswählen

convert ... "$(yad --title='eins zwei drei' ...)"
verwenden. Die aeusseren doppelten Quotes " sorgen dafuer, dass $() erkannt wird, waehrend die inneren einfachen Ticks ' verhindern, dass eventuelle Ausdruecke umgewandelt werden. Die hat es hier nicht, also waere "...\"...\"..." aequivalent, aber Ticks sind eleganter.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Relative Pfadangaben bei Service Menüs

Beitrag von Richard » 08.02.2018 13:28:35

Hab das ganze jetzt so gemacht:

Code: Alles auswählen

convert -density 200x200 -units pixelsperinch aaa.pdf -compress jpeg +adjoin "$(yad --title='Field Optionen' --form --item-separator=, --separator=' ' --field='Ausgabeordner:DIR' --field='Neuen Ordner erstellen:CDIR')"/neu.jpg
Da kommt die Fehlermeldung
convert: unable to open image `/media/data/jjj /neu-0.jpg': Datei oder Verzeichnis nicht gefunden
'jjj' ist der neu erstellte Ordner. Da werden irgendwie unnötige Leerzeichen dahinter gesetzt. Die hab ich aber definitiv nicht eingegeben.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Relative Pfadangaben bei Service Menüs

Beitrag von Cae » 09.02.2018 12:58:37

--separator=' ' schaut diesbezueglich verdaechtig aus. Erwartest du ueberhaupt mehr als einen Pfad als Rueckgabewert? Vermutlich nicht, demnach waere die Option obsolet.

Zur Not kannst du den Output nachbearbeiten, etwa

Code: Alles auswählen

convert ... "$(yad ... | sed 's/ *$//')/neu.jpg"
-- das entfernt alle Leerzeichen am Zeilenende.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten