Ваш скрипт запускается в другой папке, чем где он хранится ...
Текущий рабочий каталог, когда вы запускаете ваш скрипт, не является местоположением скрипта, это будет папка, в которой вы оказались при запуске.
Попробуйте использовать фрагмент из Получение исходного каталога скрипта Bash из , чтобы установить рабочий каталог, из которого ваши пути должны быть относительными: например,
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
cd $DIR/..
exec java -classpath EncUtility/lib/prov-jdk14-132.jar:EncUtility \
com.xxxx.projects.disc.bowl.FileChooseApp
Преамбула выполняет различную магию оболочки, чтобы определить, где на самом деле хранится скрипт. cd
затем меняет рабочий каталог на папку, содержащую его, а exec
просто для крошечной эффективности: он заменяет исполняемый процесс вашего скрипта на Java VM, а не запускает его как дочерний процесс. (Обратите внимание, что ничего кроме exec
не будет работать в вашем скрипте.)