it-swarm-ja.com

pkftk.jar実行可能ファイルとbashスクリプトpdftk現在のディレクトリ

Ubuntu-16.04では、コマンドラインプログラムpdftkが削除されました。私は毎日pdftkを使用しているので、このPDFTKフォークの使用に取り組んでいます https://gitlab.com/marcvinyals/pdftkhttps://askubuntu.com/質問/ 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/にコピーし、同じコマンドで実行可能にしました。

私が今期待したように機能していません:

[email protected]:~/M$ Sudo ls -l /usr/local/bin/pdftk
    ---xr-xr-x 1 root root 32 May  3 13:38 /usr/local/bin/pdftk

[email protected]:~/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

どのディレクトリでも機能させようとすると失敗します。

[email protected]:~/M$ pdftk *.pdf output john.pdf
    Error: Unable to access jarfile pdftk.jar

私は何を間違えましたか?

3
Dan Hunt

pdftk.jarpdftkシェルスクリプトが/usr/local/bin内に並んで存在する場合、必要なのは実際のパスをJARファイルに渡すことだけです。したがって、シェルスクリプトでこれを行うことができます。

#!/usr/bin/env bash
Java -jar /usr/local/bin/pdftk.jar "[email protected]"

または、私の意見では、より堅牢なソリューション:

#!/usr/bin/env bash
Java -jar "$0.jar" "[email protected]"

後者はシェルスクリプトの名前を使用し、.jarサフィックスを追加します。それが実際に行うすべてです。両方が同じディレクトリにある限り、これは機能するはずです。タンデムに動かしても。最初の解決策では、JARファイルへの新しいパスを使用するようにシェルスクリプトを調整する必要があります。

yoが2つのファイルを空白のあるパスにコピーすることにした場合、スクリプトが壊れてしまうため、二重引用符も使用することをお勧めします。

また、ハッシュバンは移植性が高いため(さまざまなLinuxおよびBSDフレーバー間で)変更しました。

2
0xC0000022L