質問: pkftk.jar実行可能ファイルとbashスクリプトpdftk現在のディレクトリ ubuntu-16.04では、コマンドラインプログラムpdftkが削除されました。私は毎日pdftkを使用しているので、このpdftkフォークの使用に取り組んでいます https://gitlab.com/marcvinyals/pdftk https://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/にコピーし、同じコマンドで実行可能にしました。私が今期待したように機能していません: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 私は何を間違えましたか?
回答: pdftk.jarとpdftkシェルスクリプトが/usr/local/bin内に並んで存在する場合、必要なのは実際のパスをjarファイルに渡すことだけです。したがって、シェルスクリプトでこれを行うことができます。#!/usr/bin/env bash java -jar /usr/local/bin/pdftk.jar "$@" または、私の意見では、より堅牢なソリューション:#!/usr/bin/env bash java -jar "$0.jar" "$@" 後者はシェルスクリプトの名前を使用し、.jarサフィックスを追加します。それが実際に行うすべてです。両方が同じディレクトリにある限り、これは機能するはずです。タンデムに動かしても。最初の解決策では、jarファイルへの新しいパスを使用するようにシェルスクリプトを調整する必要があります。yoが2つのファイルを空白のあるパスにコピーすることにした場合、スクリプトが壊れてしまうため、二重引用符も使用することをお勧めします。また、ハッシュバンは移植性が高いため(さまざまなlinuxおよびbsdフレーバー間で)変更しました。