запуск исполняемого файла из / usr / local / bin требует доступа к локальному файлу

У меня есть исполняемый файл с именем «октан», который я хочу запускать глобально. Для запуска исполняемому файлу необходим доступ к локальному двоичному файлу «octane.dat».

Я поместил каталог, содержащий исполняемый файл и бинарный файл, в / opt / как root и создал символическую ссылку на исполняемый файл в / usr / local / bin /. Теперь, если я наберу «octane» в любом месте, он запускается, но выдает ошибку, говоря, что он не будет работать без двоичного файла, «octane.dat». Octane запускается только в том случае, если мой текущий рабочий каталог совпадает с исполняемым файлом и двоичным файлом, в /usr/local/bin.

.

Есть предложения, как это исправить? Должен ли я сделать этот каталог глобальным, используя .bashrc?

Спасибо.

5
задан 19 December 2012 в 21:10

1 ответ

Вместо символической ссылки вы можете создать скрипт-обертку в / usr / local / bin:

#! /bin/sh
cd /opt/octane
exec ./octane "$@"

Сделать скрипт исполняемым с помощью chmod +x /usr/local/bin/octane.

«$ @» - это аргументы командной строки, поэтому вы все равно можете запустить octane an_argument.

Сценарий изменяет CWD (текущий рабочий каталог) только внутри сценария, поскольку сценарий запускается в совершенно новом экземпляре оболочки, который заканчивается в конце сценария. Изменение текущего рабочего каталога для исполняемого файла может быть проблемой, если вы хотите дать относительный путь к исполняемому файлу. Например. если вы находитесь в своем домашнем каталоге и запускаете octane a_file_in_the_home_directory, он не работает, потому что исполняемый файл октана вызывается с CWD из / opt / octane, а a_file_in_the_home_directory не находится в / opt / octane. Если вас это беспокоит, вы можете не только указать абсолютные пути (octane ~/a_file_in_the_home_directory), либо использовать более сложную версию скрипта.

0
ответ дан 19 December 2012 в 21:10

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

Похожие вопросы: