我有一个程序,它使用相对路径(例如“..”)打开文件。
现在的问题是,当我从另一个目录执行程序时,相对路径不是相对于程序而是相对于工作目录。因此,如果我使用“/path/to/program/myprog”启动程序,它将无法找到该文件。
有没有办法独立于工作目录执行程序? Id est,如如果工作目录是程序所在的目录?或者我只是以一种过于复杂的方式思考,有一种更简单的方法来引用文件,哪个位置只能通过其相对于程序文件路径的路径来知道?
如果程序本身不这样做,那么它就是一个糟糕的程序。糟糕的程序应该用一些 Bash 脚本来包装:
#!/bin/bash
set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*
上面的脚本确定它所在的目录,然后将当前工作目录更改为该目录并运行程序myprog
从那里,透明地传递所有参数。因此,您必须将此脚本放入您的程序所在的同一目录中并运行它而不是您的程序。
假设您有权访问源代码并且可以修复程序,然后使用proc fs http://en.wikipedia.org/wiki/Procfs确定程序的位置,然后使用绝对路径。
例如,/proc/self/exe
将始终是指向当前进程的二进制文件的符号链接。使用readlink http://linux.die.net/man/2/readlink读取它的值,然后剪切可执行文件名称,你就得到了目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)