Hallo,
ich habe mich schon durchs Forum gewühlt, komme aber gerade nicht weiter. Problem sind wie so oft die Leerzeichen in Dateinamen. ☹
Ich habe beispielhaft folgendes Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #!/bin/bash -xf bereich="A1-2 B3-5" output_filename_tmp="/tmp/extracted.pdf" i=0 STRING="" chars=( {A..Z} ) for file in "$@"; do if [ -n "$file" ] then STRING=$STRING${chars[i]}=${file// /\\ }" " #STRING=$STRING${chars[i]}='"'$file'" ' #STRING="$STRING"${chars[i]}="'"${file}"' " #STRING=$STRING${chars[i]}='"'${file// /∑}'" ' #STRING=$STRING${chars[i]}='"'${file// /\\ }'" ' else true fi let "i+=1" done echo echo $STRING echo "$STRING" echo # Syntax: pdftk A=/Pfad/zur/PDF-Datei1 B=/Pfad/zur/PDF-Datei cat A1-2 B3-5 output Neu.pdf # pdftk ${STRING//∑/ } cat $bereich output "$output_filename_tmp" pdftk $STRING cat $bereich output "$output_filename_tmp" pdftk "$STRING" cat $bereich output "$output_filename_tmp" |
Ich rufe es beispielsweise folgendermaßen auf:
~/bin/bash-test '/tmp/name.pdf' '/tmp/Datei Name.pdf'
Was beim zweiten echo-Befehl noch gut aussieht, funktioniert bei der Ausführung mit pdftk schon nicht mehr, da der ganze String als ein Dateiname aufgefasst wird. Und wenn die Variable wie in Zeile 26 nicht in Anführungszeichen eingeschlossen wird, dann sieht die Ausgabe (durch #!/bin/bash -xf) so aus:
+ echo /tmp/name.pdf '/tmp/Datei\' Name.pdf
Wie an den auskommentierten Zeilen zu sehen, habe ich schon vieles verschiedene ausprobiert, aber leider hat nix bisher funktioniert.
Ich vermute, ich müsste die einfachen Hochkommata zum Escapen in Zeile 12 verwenden, aber ich schaffe es nicht, diese in den String zu bringen.
Woran liegt das? Wo ist mein Denkfehler? Ich freue mich über jeden Hinweis!
Vielen Dank, J-K
PS:
Wer neugierig ist, ich habe ein Skript geschrieben, dass aus Nautilus heraus aufgerufen wird und mit zenity eine grafische Oberfläche bietet um aus einer oder mehreren PDF-Dateien bestimmte Seiten mit pdftk zu einer Datei zusammenzustellen. Bei Interesse poste ich gerne den ganzen Code.