Скрипт работает из командной строки, но не из команды в Application Finder Launcher

Я написал скрипт bash, найденный в каталоге:

/home/harmelodic/.Jetbrains/CLion.sh

который выполняет следующее:

#!/bin/sh

./clion*/bin/clion.sh

Это для запуска clion.sh скрипт найден по адресу:

/home/matthew/.Jetbrains/clion-2016.2.3/bin/clion.sh

Если я открою терминал в /home/harmelodic/.Jetbrains/ и выполнить:

$ ./CLion.sh

Он успешно запускается и открывает CLion IDE.

Однако, если я использую панель запуска из Application Finder для выполнения Command чтобы выполнить скрипт (как показано ниже), CLion IDE не открывается.

Я полностью в тупике. Я думал Command Ввод будет запускать скрипт нормально, но это не так.
Я гарантировал, что скрипт является исполняемым и что он запускается через терминал, но он отказывается запускаться через панель запуска, найденную в Application Finder.

Почему и как мне это исправить?

1 ответ

Решение

Ну, у нас была ошибка PEBCAK...

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

Это означает, что если бы я пошел в /home/harmelodic/ и побежал:

$ ./.Jetbrains/CLion.sh

Сценарий потерпит неудачу, так как он будет искать /clion*/bin/clion.sh в:

/home/harmelodic/

вместо

/home/harmelodic/.Jetbrains/

Решение состояло в том, чтобы получить текущий каталог скрипта и затем выполнить команду, используя текущий каталог в сочетании с относительным путем, чтобы имитировать относительный путь, фактически используя абсолютные пути:

#!/bin/sh

CURRENT_DIR=`dirname $0`

$CURRENT_DIR/clion*/bin/clion.sh

Это работает из любого каталога, что означает, что он работает в программе запуска из Application Finder.

Другие вопросы по тегам