LINUX.ORG.RU
решено ФорумAdmin

Помогите разобраться со скриптом запуска Lightstreamer

 


0

1

Версия 5.1.1-Colosseo, если имеет значение

# up two dirs there is LS_HOME
_LS_HOME=$(dirname "${0}")
if [ "${_LS_HOME}" = "." ]; then
    # in the same dir
    _LS_HOME=$(dirname "${PWD}")
elif [ -z "$(echo ${_LS_HOME} | grep "^/" 2> /dev/null)" ]; then
    # relative dir to target
    _LS_HOME="${PWD}"
else
    # absolute path
    _LS_HOME=$(dirname "${_LS_HOME}")
fi
LS_HOME=$(dirname "${_LS_HOME}")

echo "Lightstreamer Server directory:"
echo "LS_HOME = \"${LS_HOME}\""
echo
не могу понять сути вот этих конструкций с фигурными скобками.

Спасибо.

Сдаётся мне, кто-то сильно перемудрил и налажал с условиями определения текущей директории.

★★★★★

Последнее исправление: targitaj (всего исправлений: 1)

_LS_HOME=$(dirname «${0}»

запущенное, из скрипта, возвращает точку

просто выполнение в терминале

echo «${0}»

возвращает

-bash

а если

dirname «${0}»
dirname: invalid option — 'b'
Try `dirname --help' for more information.

ага, ну логично

как блин оно работает-то?

targitaj ★★★★★
() автор топика
Последнее исправление: targitaj (всего исправлений: 2)

смысл в том, директория с софтиной лежит в директории

/home/user/SOFT/4web/Lightstreamer-5.1.1-Colosseo/
используется симлинк
lightstreamer -> Lightstreamer-5.1.1-Colosseo/
далее, используется симлинк на родной скрипт запуска
Lightstreamer.sh -> Lightstreamer-5.1.1-Colosseo/bin/unix-like/LS.sh
то есть, еще раз, корневой директорией для конструкции является директория
/home/user/SOFT/4web/
в которой лежит директория с софтинкой, симлинк на директорию и симлинк на sh скрипт запуска.

И всё бы хорошо, но при попытке запустить через симлинк, находясь в озвученной корневой директории, скрипт выдаёт

~/SOFT/4web$ ./Lightstreamer.sh run
Java environment:
JAVA_HOME = "/opt/java-7-oracle"
JAVA_OPTS = "-server -Xms40m -Xmx400m"

Setting file descriptor limit to 4096
Configured file descriptors, soft limit: 4096
Configured file descriptors, hard limit: 4096
Configured sysctl fs.file.* values:
fs.file-nr = 864	0	204888
fs.file-max = 204888

_LS_HOME /home/user/SOFT (вот это я уже начал дебаг вывод в скрипт дописывать, в оригинале скрипт это не выводит)
Lightstreamer Server directory:
LS_HOME = "/home/user"

Starting Lightstreamer Server...
Please check logs for detailed information.
Error: Could not find or load main class com.lightstreamer.LS

и, разумеется, оно не запускается, потому что это

Lightstreamer Server directory:
LS_HOME = «/home/user»

является чушью

Чтобы исправить эту чушь следует понять логику работы кода, процированного в первом сообщении, а знаний у меня для этого явно не хватает.

В общем, помогите, народ, пожалуйста.

targitaj ★★★★★
() автор топика
Последнее исправление: targitaj (всего исправлений: 4)
Ответ на: комментарий от targitaj

Раз там символические ссылки, которых быть не должно, то можно попробовать так:

LS_HOME=$(realpath "$(dirname "${_LS_HOME}")")
Но это будет работать, если в правильном пути нету символических ссылок, иначе они тоже будут разрешены.

xaizek ★★★★★
()

Такое впечатление, что автор скрипта хотел сказать что-то вроде LS_HOME="$(readlink -f "$(dirname "${0}")")", но почему-то вместо этого написал вышеприведенное.

Что до записи ${varname} вместо $varname, то в приведенном куске разницы никакой. Разница была бы, например, тут:

foo=Something
bar=$foobar
baz=${foo}bar
. Тут в $bar в итоге было бы значение переменной $foobar (т. е. пустая строка, т. к. $foobar не определена), а в $baz --- конкатенация из значения $foo и слова bar (т. е. Somethingbar).

dexpl ★★★★★
()
Ответ на: комментарий от xaizek

для проверки, закаментил весь блок проверки и указал руками абсолютный путь переменной. Заработало. С этим ясно.

realpath не сработало ((

targitaj ★★★★★
() автор топика
Ответ на: комментарий от dexpl

та же самая хрень,

LS_HOME = «/home/user»

получается

В общем, надо, наверное, выкинуть нахрен этот блок. Зачем он там вообще нужен? Путь - это такая же переменная, как и JAVA_HOME. Вот ведь велосипедисты...

targitaj ★★★★★
() автор топика
Ответ на: комментарий от dexpl

Что до записи ${varname} вместо $varname, то в приведенном куске разницы никакой.

Так, блин, он что, тупо путь запускаемого скрипта берет штоль??? Ёмаё... А нахрена он туда скобки фигурные впихнул??

Ааа, ну понятно... Если я запускаю ./script, то эта проверка даст точку. А если /home/user/SOFT/blabla, то даст /home/user/SOFT. Теоретически.

Ясно, в общем, спасибо.

targitaj ★★★★★
() автор топика
Последнее исправление: targitaj (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.