Автор Гілка: Запуск java з-під bash  (Прочитано 3174 раз)

Відсутній sigito

  • Кореспондент
  • ***
  • дописів: 105
  • Карма: +0/-0
Запуск java з-під bash
« : 2011-08-12 20:18:19 »
Доброго вечора.
Мені необхідно запустити java-програму з-під bash-скрипта.
Є код:
#!/bin/bash

...

WORK_DIR="/mnt"
JAVA_HOME="${WORK_DIR}/jre1.6.0_26"
JAVA="${JAVA_HOME}/bin/java"
DOWNLOADER="${WORK_DIR}/downloader.jar"
DOWNLOAD="${JAVA} -jar ${DOWNLOADER}"

...

do_download()
{
    ${DOWNLOAD}   # line 121
}

...

do_download

...
при цьому отримую помилку: /mnt/main.sh: line 121: /mnt/jre1.6.0_26/bin/java -jar /mnt/downloader.jar: No such file or directory

Хтось може пояснити в чому проблема?
« Змінено: 2011-08-12 23:51:35 від sigito »
Debian/wheezy x86_64, lxde

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Запуск java з-під bash
« Відповідей #1 : 2011-08-12 20:57:20 »
Використайте масив замість рядка і розкривайте його як масив:

#!/bin/bash

...

WORK_DIR="/mnt"
JAVA_HOME="${WORK_DIR}/jre1.6.0_26"
JAVA_CMD="${JAVA_HOME}/bin/java"
DOWNLOADER_JAR="${WORK_DIR}/downloader.jar"
DOWNLOAD_CMD=( "${JAVA_CMD}" -jar "${DOWNLOADER_JAR}" )

...

do_download()
{
    "${DOWNLOAD_CMD[@]}"   # line 121
}

...

do_download

...
 


Причина вашої помилки в тому, що ви розкрили змінну $DOWNLOAD в лапках - "${DOWNLOAD}", а в цьому конкретному випадку потрібно було змінну розкрити без лапок - ${DOWNLOAD}. Саме тому баш не робить її розбір по пробілах, а ввважає все однією назвою програми.
[Fedora Linux]

Відсутній sigito

  • Кореспондент
  • ***
  • дописів: 105
  • Карма: +0/-0
Re: Запуск java з-під bash
« Відповідей #2 : 2011-08-12 23:56:35 »
Хм, мені таке й в голову не приходило, а проблема така примітивна, дуже дякую.
Debian/wheezy x86_64, lxde

Відсутній BM

  • Кореспондент
  • ***
  • дописів: 162
  • Карма: +0/-0
  • SUSE Linux Products GmbH
Re: Запуск java з-під bash
« Відповідей #3 : 2011-08-19 15:17:17 »
Хм, мені таке й в голову не приходило, а проблема така примітивна, дуже дякую.

Якби це було проблемою... Справжня проблема та, що downloader.jar — якась незапакована бінарна фіґня, що ще й лежить чорт знає де. У вашому випадку скрипт шукає в /mnt/ директорії, замість щоби в %{_javadir}. Іншим словом: бардак.
« Змінено: 2011-08-19 15:18:17 від BM »

Відсутній sigito

  • Кореспондент
  • ***
  • дописів: 105
  • Карма: +0/-0
Re: Запуск java з-під bash
« Відповідей #4 : 2011-08-30 14:15:55 »
Хм, мені таке й в голову не приходило, а проблема така примітивна, дуже дякую.

Якби це було проблемою... Справжня проблема та, що downloader.jar — якась незапакована бінарна фіґня, що ще й лежить чорт знає де. У вашому випадку скрипт шукає в /mnt/ директорії, замість щоби в %{_javadir}. Іншим словом: бардак.
Шановний, зазвичай не розібравшись в ситуації не варто розказувати де краще. Дане розташування зумовлене умовами, в яких виконується весь скрипт.
Debian/wheezy x86_64, lxde

Відсутній BM

  • Кореспондент
  • ***
  • дописів: 162
  • Карма: +0/-0
  • SUSE Linux Products GmbH
Re: Запуск java з-під bash
« Відповідей #5 : 2011-09-16 01:35:55 »
Шановний, зазвичай не розібравшись в ситуації не варто розказувати де краще. Дане розташування зумовлене умовами, в яких виконується весь скрипт.
Варто. Якщо це програма для вас особисто, тоді зазвичай воно має запускатись просто:

java -jar /path/to/your.jar <ENTER>
У всіх інших випадках — пишеться .spec із 10ти стрічок і робиться нормальний пакет. Роботи на хвилин 10.

P.S. А, я-ж забув, ви знаєте краще... :)

Відсутній sigito

  • Кореспондент
  • ***
  • дописів: 105
  • Карма: +0/-0
Re: Запуск java з-під bash
« Відповідей #6 : 2011-09-19 23:45:27 »
Шановний, зазвичай не розібравшись в ситуації не варто розказувати де краще. Дане розташування зумовлене умовами, в яких виконується весь скрипт.
Варто. Якщо це програма для вас особисто, тоді зазвичай воно має запускатись просто:

java -jar /path/to/your.jar <ENTER>
У всіх інших випадках — пишеться .spec із 10ти стрічок і робиться нормальний пакет. Роботи на хвилин 10.

P.S. А, я-ж забув, ви знаєте краще... :)

я не проти конструктивної критики, але зараз вона недоречна.
Debian/wheezy x86_64, lxde