Скрипт работает из командной строки, но не из команды в 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.