pkftk.jar 可执行文件,带有 bash 脚本 pdftk 当前目录

pkftk.jar 可执行文件,带有 bash 脚本 pdftk 当前目录

在 ubuntu-16.04 中,命令行程序 pdftk 被删除了。我每天都使用 pdftk,所以我正在研究使用这个 PDFTK forkhttps://gitlab.com/marcvinyals/pdftk根据以下说明https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-bioni

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

现在,我已经使用上面的代码构建了名为 pdftk 的 bash 脚本,并将其放入/usr/local/bin/并使其可执行

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

我已将该pdftk.jar文件复制到/usr/local/bin/并使用相同的命令使其可执行。

现在没有像我希望的那样工作:

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

当我尝试让它在任何目录中工作时它失败了。

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

我做错了什么?

答案1

如果pdftk.jar和您的pdftkshell 脚本并存,则/usr/local/bin只需传递 JAR 文件的实际路径即可。您可以在 shell 脚本中按如下方式执行此操作:

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

或者,我认为更强大的解决方案:

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

后者使用 shell 脚本的名称并附加后缀.jar。这实际上就是它所做的一切。因此,只要它们都位于同一目录中,这应该可以工作。即使您同时移动它们。而第一个解决方案需要您调整 shell 脚本以使用 JAR 文件的新路径。

我也喜欢用双引号,因为如果决定将这两个文件复制到其中有空白的路径中,脚本就会中断。

我还改变了 hashbang,因为它更具可移植性(跨各种 Linux 和 BSD 版本)。

相关内容