我有一个用C编写的程序。它的目录结构是这样的:
root/
program.sh
textures/
texture1.png
program.sh
以如下方式导入纹理:load_textures("./textures/texture1.png")
(相对路径)。因此,只有从program.sh
目录执行root
时,程序才有效。
我想创建一个program.sh
的链接,这样,每当我执行链接时,我都能够从根目录执行program.sh
。换句话说,我想从根目录外执行program.sh
。
现在,我更喜欢一个解决方案来做这个而不改变源代码(如果有办法),否则,在给定当前场景的情况下,你会如何建议我在C中打开文件/纹理?
有一个类似的问题here,但它没有答案。
从注释中可以清楚地看出,目标是从不同的目录执行程序,但程序的当前工作目录指向其自己的目录。
虽然这可以在C中完成(在POSIX系统中,假设由于.sh
扩展,通过chdir
和execvp
系统调用的组合),它在包装器shell脚本中更容易实现,如下所示:
#!/bin/sh
pushd /path/to/executable
./program.sh $@
popd