Связать исполняемый файл из его оригинального каталога - PullRequest
0 голосов
/ 10 марта 2019

У меня есть программа, написанная на C. Ее структура каталогов такая:

root/
    program.sh
    textures/
        texture1.png

program.sh импортирует текстуры таким образом: load_textures("./textures/texture1.png") (относительные пути). Следовательно, программа работает только всякий раз, когда я выполняю program.sh из каталога root.

Я хочу создать ссылку на program.sh, чтобы при выполнении ссылки я мог выполнить program.sh из корневого каталога. Другими словами, я хочу выполнить program.sh вне корневого каталога.

Теперь я бы предпочел, чтобы решение делало это без изменения исходного кода (если есть способ), в противном случае, как бы вы порекомендовали мне открывать файлы / текстуры в C, учитывая текущий сценарий?

У меня был похожий вопрос здесь , но он остается без ответа.

1 Ответ

1 голос
/ 10 марта 2019

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

Хотя можно сделать в C (в системе POSIX, как предполагается из-за расширения .sh, через комбинацию системных вызовов chdir и execvp), это гораздо более легко достигается в скрипте оболочки, например:

#!/bin/sh

pushd /path/to/executable
./program.sh $@
popd
...