我正在尝试让一个不在我的发行版包管理器中的程序运行。它不提供 makefile 或源代码,仅提供二进制文件。如果我将整个文件夹复制到 /usr/local ,然后将其添加到 .bashrc 中的 PATH 中,我可以执行该程序,但会出现问题。该程序需要其目录中的一些本地文件,并将它们存储为相对路径。该程序查找我当前所在目录中的文件,而不是程序本身所在目录中的文件。有什么办法解决这个问题吗?谢谢。
答案1
如果该程序确实如此不友好以至于期望您运行它仅有的从它自己的目录中,那么您可能必须将其保留在它自己的目录(包括子文件夹)中并创建一个位于您的 PATH 上的脚本。该脚本会将目录更改为程序所在位置并运行它。一切都会好起来。好吧……好吧。就像是:
#! /bin/sh -
cd /usr/local/crudesoftware &&
./theprogram
答案2
许多程序使用它们自己独有的环境变量。例如,名为 的程序foo
可能会查找名为FOO_DIR
或 的环境变量FOO_DATA_PATH
(如果未设置该变量,它可能会使用当前目录作为默认目录)。我知道你说你没有来源,但是你有任何文档吗?也许是.bashrc
使用该程序的示例?
作为最后的手段,请尝试
strings foo
(假设这foo
是程序的名称)。这列出了二进制文件中的所有“字符串”(strings(1)
详细信息请参见)。这会产生大量的输出;其中大部分都是胡言乱语。您可能应该将其通过管道传输到寻呼机中;例如,more
或less
。查找看起来像环境变量名称的行 – 即全部大写,可能包括下划线 – 并尝试将它们设置到安装程序的目录。