pkftk.jar ausführbare Datei mit aktuellem Verzeichnis des Bash-Skripts pdftk

445
Dan Hunt

In ubuntu-16.04 wurde das Befehlszeilenprogramm pdftk gelöscht. Ich benutze pdftk jeden Tag, also arbeite ich an der Verwendung dieses PDFTK-Abzweigs https://gitlab.com/marcvinyals/pdftk anhand der Anweisungen unter https://askubuntu.com/questions/1028522/how-can-i-install -pdftk-in-ubuntu-18-04-bioni

#!/bin/bash java -jar pdftk.jar 

Jetzt habe ich das Bash-Skript namens pdftk mit dem obigen Code erstellt und darin eingefügt /usr/local/bin/und ausführbar gemacht

sudo chmod +x /usr/local/bin/pdftk 

Ich habe die pdftk.jarDatei nach kopiert /usr/local/bin/und mit demselben Befehl ausführbar gemacht.

Funktioniert nicht wie ich gerade gehofft habe:

me@mine:~/M$ sudo ls -l /usr/local/bin/pdftk ---xr-xr-x 1 root root 32 May 3 13:38 /usr/local/bin/pdftk  me@mine:~/M$ sudo ls -l /usr/local/bin/pdftk.jar -rwxr-xr-x 1 root root 742367 May 2 16:32 /usr/local/bin/pdftk.jar 

Wenn ich versuche, es in einem beliebigen Verzeichnis zum Laufen zu bringen, schlägt es fehl.

me@mine:~/M$ pdftk *.pdf output john.pdf Error: Unable to access jarfile pdftk.jar 

Was habe ich falsch gemacht?

3
Nun zeigt es mir die pdftk-Hilfedatei. Dan Hunt vor 6 Jahren 0
Entschuldigung, ich habe vergessen, "$ @" `hinzuzufügen, das die Argumente (beginnend mit" $ 1 ") als zitierte Argumente an den Aufruf von" java "übergibt. Sie haben also die Hilfeausgabe erhalten, weil die Argumente, die Sie dem Shell-Skript übergeben haben, nicht weitergegeben wurden. Ich habe meine Antwort entsprechend korrigiert. 0xC0000022L vor 6 Jahren 0

1 Antwort auf die Frage

2
0xC0000022L

Wenn das pdftk.jarund Ihr pdftkShell-Skript Seite an Seite im Inneren leben /usr/local/bin, müssen Sie lediglich den tatsächlichen Pfad an die JAR-Datei übergeben. Sie können dies entweder im Shellskript tun:

#!/usr/bin/env bash java -jar /usr/local/bin/pdftk.jar "$@" 

oder meiner Meinung nach die robustere Lösung:

#!/usr/bin/env bash java -jar "$0.jar" "$@" 

Letzterer verwendet den Namen des Shell-Skripts und fügt das .jarSuffix hinzu. Das ist alles was es wirklich tut. Solange beide in demselben Verzeichnis leben, sollte dies funktionieren. Auch wenn Sie sie im Tandem bewegen. Bei der ersten Lösung müssten Sie das Shell-Skript anpassen, um den neuen Pfad zur JAR-Datei zu verwenden.

Ich ziehe es vor, auch doppelte Anführungszeichen zu geben, denn wenn Sie sich dazu entschließen, die beiden Dateien in einen Pfad zu kopieren, der ein Leerzeichen enthält, würde das Skript kaputt gehen.

Ich habe auch den Hashbang geändert, da dieser portabler ist (über verschiedene Linux- und BSD-Varianten hinweg).

Vielleicht wäre es eine bessere Idee, die jar-Datei unter `/ usr / local / lib` zu speichern. jpaugh vor 6 Jahren 0
@Jaugh ja, fraglich. Aber das würde das Shell-Skript ein wenig komplizieren. Dann sollte `java -jar" $ . Jar "` ausgeführt werden (wenn Sie nicht mit String-Substitutionen in Bash vertraut sind, ist das ein ziemlicher Schluck ) ... vorausgesetzt, der einzige Unterschied im Pfad ist `/ bin /` vs. `/ lib /`. 0xC0000022L vor 6 Jahren 0
me @ mine: ~ / Desktop $ / usr / local / bin / pdftk * .pdf-Ausgabe bob.pdf SYNOPSIS pdftk [input_pw ] [ ] Für vollständige Hilfe: pdftk --help Dan Hunt vor 6 Jahren 0
@ 0xC0000022L Vielen Dank. Funktioniert jetzt perfekt mit dem zweiten Zitat. java -jar "$ 0.jar" "$ @" Dan Hunt vor 6 Jahren 0