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

5

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

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

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

Спасибо.

    
задан kedmond 19.12.2012 в 18:10
источник

1 ответ

5

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

#! /bin/sh
cd /opt/octane
exec ./octane "[email protected]"

Сделайте скрипт исполняемым с 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 ~/a_file_in_the_home_directory ), либо использовать более сложную версию скрипта.

    
ответ дан elmicha 19.12.2012 в 19:31
источник