@Paul Rの回答へのコメントで、「シェルスクリプトもjarファイルと同じディレクトリにあります。そのため、SHファイルをデフォルトでターミナルで開くように割り当てた後、ダブルクリックするだけです。」それが問題だと思います.シェルスクリプトをダブルクリックして実行すると、スクリプトが配置されているディレクトリではなく、ユーザーのホームディレクトリに設定された作業ディレクトリで実行されます。これを回避するには、スクリプト cd をそのディレクトリに移動します。
cd "$(dirname "$BASH_SOURCE")"
編集: $BASH_SOURCE はもちろん、他のシェルでは利用できない bash 拡張機能です。スクリプトが bash での実行を期待できない場合は、代わりにこれを使用します。
case "$0" in
*/*)
cd "$(dirname "$0")" ;;
*)
me="$(which "$0")"
if [ -n "$me" ]; then
cd "$(dirname "$me")"
else
echo "Can't locate script directory" >&2
exit 1
fi ;;
esac
ところで、[ ! -f file-3*.jar ]
一致するファイルが複数あると奇妙に失敗するため、この構造は私を緊張させます。(それが起こるはずがないことは知っていますが、とにかく起こるはずのないことは、とにかく発生するという厄介な傾向があります。)代わりにこれを使用します:
matchfiles=(file-3*.jar)
if [ ! -f "${matchfiles[0]}" ]; then
...
繰り返しになりますが、bash 拡張機能が当てにならない場合は、どの POSIX シェルでも機能する代替手段を次に示します。
if [ ! -f "$(echo file-3*.jar)" ]; then
複数の一致がある場合、これは失敗する (つまり、ファイルが存在しないかのように振る舞う) ことに注意してください。