从 /usr/local/bin 启动可执行文件需要访问本地文件

从 /usr/local/bin 启动可执行文件需要访问本地文件

我有一个名为“octane”的可执行文件,我希望能够全局启动它。该可执行文件需要访问本地二进制文件“octane.dat”才能运行。

我以 root 身份将包含可执行文件和二进制文件的目录放在 /opt/ 中,并在 /usr/local/bin/ 中创建了可执行文件的符号链接。现在,如果我在任何地方输入“octane”,它都会启动,但会抛出一个错误,提示没有二进制文件“octane.dat”就无法运行。只有当我当前的工作目录与可执行文件和二进制文件相同(位于 /usr/local/bin 中)时,Octane 才会启动。

关于如何修复此问题有什么建议吗?我是否必须使用 .bashrc 将该目录设为全局目录?

谢谢。

答案1

您可以在 /usr/local/bin 中创建包装脚本,而不是符号链接:

#! /bin/sh
cd /opt/octane
exec ./octane "$@"

使用 使脚本可执行chmod +x /usr/local/bin/octane

“$@”是命令行参数,因此您仍然可以运行octane an_argument

该脚本仅在脚本内部更改 CWD(当前工作目录),因为该脚本在脚本末尾结束的全新 shell 实例中运行。如果您想为可执行文件提供相对路径名,则更改可执行文件的当前工作目录实际上可能会有问题。例如,如果您在主目录中运行octane a_file_in_the_home_directory,它不起作用,因为 Octane 可执行文件是用 /opt/octane 的 CWD 调用的,而 a_file_in_the_home_directory 不在 /opt/octane 中。如果这是一个问题,您可以记住只提供绝对路径名(octane ~/a_file_in_the_home_directory)或使用更复杂版本的脚本。

相关内容