2010-09-09 2 views
3

Он все, У меня проблема с моим скриптом bash. Вот мой код:Проблема с моим скриптом Bash

#!/bin/bash 
java -jar my_app.jar 
echo "The present working directory is `pwd`" 

Если я EXEC его ./script_name это работает, но если я дважды щелкните на нем не работают, я получил эту ошибку:
«Не удается получить доступ к jarfile my_app.jar ».
Тогда выход pwd отличается!

Моя ОС - MacOSX, но мне нужно создать скрипт bash, который также работает в Linux.

+0

Если это необходимо для установки некоторых предметов, попробуйте такие инструменты, как http://izpack.org/features/. Вы можете создать самораспаковывающиеся двоичные файлы. – Jayan

ответ

0

Если вы используете графический инструмент для выполнения сценария, текущий рабочий каталог является произвольным. Текущий рабочий каталог не является полезной концепцией в графических приложениях, и они обычно не используют и не изменяют его. Это означает, что вы должны указать полный путь в вызове программы java или изменить каталог, в котором находится скрипт. К сожалению, there is no good solution for the latter.

+0

Я знаю, но мне нужно «установить» это программное обеспечение в разных ОС, поэтому я не могу использовать полный путь ... любые решения? – enfix

+0

Вам действительно нужен сценарий Bash? По крайней мере, в системах Linux и OS X я использую запуск сценария Bash из файлового менеджера, который запускает текстовый редактор и не запускает скрипт. Если это графическое приложение, вы должны создать пакет приложений для OS X, который содержит все файлы, необходимые для запуска приложения, и может быть перемещен без проблем. – Philipp

+0

Только мои два цента, вы всегда должны использовать полностью квалифицированные пути в своих сценариях, даже если вы просто делаете простой java = 'which java' (лучше иметь фактический путь, но это бандад) – kSiR

0

Переменная $ 0 должна содержать путь к скрипту. Вы можете использовать имя-каталог, чтобы получить каталог, скрипт находится в

java -jar `dirname $0`/my_app.jar 
+2

У этого могут быть проблемы, если что-нибудь в путь имеет пространство (общее в OS X) - вместо этого используйте '' $ (dirname "$ 0")/my_app.jar ". Кроме того, как отметил Филипп, существуют обстоятельства, при которых это не будет работать (хотя должно быть хорошо для двойного щелчка по сценарию в Finder). –

0

КИ, так что есть 2 вопросов, которые вы должны решить:.

  1. Предположит, что ваш сценарий и вашу баночку всегда устанавливается в тот же каталог, проблема 1 заключается в том, чтобы идентифицировать этот каталог. Это обсуждается here. Как только вы узнаете каталог скрипта, вы можете ссылаться на свой файл jar относительно этого.

  2. Путь к системе установлен java исполняемый файл. В конечном счете просто использование голого java прост и условно и зависит от правильной настройки PATH. Если это не для вас, просто включите упорядоченный список наиболее распространенных путей и посмотрите, выполняются ли они с помощью if [ -e /usr/bin/java ], например, запуская первый код, который находит ваш код.

1

Я считаю, что solution предложил Shawn J. Goff и прокомментированы Gordon Davisson может быть улучшена за счет использования современной bash синтаксис команды подстановки. Я предполагаю, что скрипт и jar находятся в одной папке:

#!/bin/bash 
java -jar "$(cd "$(dirname "$0")"; pwd)/my_app.jar" 
echo The present working directory is $(cd "$(dirname "$0")"; pwd) 
Смежные вопросы