位于位置 A 的可执行文件如何在位置 B 运行它?

位于位置 A 的可执行文件如何在位置 B 运行它?

所以,我的 debian 服务器中有一个可执行文件,并且该可执行文件位于/home/human/ExecuteIt,但我仍然无法弄清楚如何在另一个位置运行我的可执行文件。就我而言,是的/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/

通常,对于 1 个配置文件夹,我可以将可执行文件复制/粘贴到,/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/然后使用sudo chmod +x ./executable成功运行它,但我的可执行文件有几个包含不同配置的配置文件夹。

如果我可以将我的可执行文件分开并使用不同的配置执行它而无需复制/粘贴,那就太好了。有没有办法在不同的位置执行我的可执行文件?

答案1

如果您的可执行文件从相对路径获取其配置,则该路径是相对于pwd(当前工作目录)的。所以:

> cd /there/locA
> pwd
/there/locA
> /there/stuff/executable

可执行文件将相对于 locB 进行查找。现在:

> cd /there/locB
> pwd
/there/locB
> /there/stuff/executable

可执行文件将相对于 locB 进行查找。

如果您的意思是您想在密码为 locB 时运行可执行文件,但神奇地从 locB 获取配置,那么答案是唯一的方法是以某种方式告诉可执行文件,例如,通过添加命令-用于调用它的行参数,或使用自定义环境变量。简单地将可执行文件复制到 locA,然后尝试专门从 locB 调用该可执行文件,希望它使用 locA 作为密码,这是行不通的——密码仍然是 locB。

我注意到为单个命令设置 $PWD:

> PWD=/there/locA bash -c 'echo $PWD'
/there/locB

不起作用。所以也许你无法欺骗密码。

答案2

我不确定我是否理解你的问题,所以我会用自己的话重申我的理解。您有一个程序,该程序在该程序所在的同一目录中查找其配置文件。例如,如果您运行/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/executable,它会在 中查找配置文件/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1。您希望能够使用不同的配置运行程序,例如/home/human/ExecuteIt/FolderWithConfiaguration/Configuration2。而且您不想制作该程序的多个副本。

你(们)能做到符号链接到多个目录中的可执行文件,并建立到所有公共文件的符号链接。例如,假设该程序需要三个文件:可执行文件executable、数据文件data和配置文件config。您有两种不同的配置,分别放入 /home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/config/home/human/ExecuteIt/FolderWithConfiaguration/Configuration2/config。您拥有可执行文件和数据文件的一份副本,均为/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/.并且您/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/executable在目录中创建了一个符号链接/home/human/ExecuteIt/FolderWithConfiaguration/Configuration2/,并且还创建了一个到 的符号链接/home/human/ExecuteIt/FolderWithConfiaguration/Configuration1/data

cd /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2
ln -s ../Configuration1/executable ../Configuration1/data

符号链接告诉系统在不同的地方寻找真实的文件。它们本身不包含任何数据,因此如果您更新可执行文件或 中的数据Configuration1,这适用于所有配置;并且文件只有一份,因此额外的配置只需要配置文件的磁盘空间。

大多数以这种方式运行的程序在查找数据和配置文件时都会考虑可执行文件的位置。如果您使用符号链接,则此方法将不起作用。相反,您可以制作一个硬链接。硬链接是同一个文件的多个路径;文件的所有硬链接都是等效的。

cd /home/human/ExecuteIt/FolderWithConfiaguration/Configuration2
ln ../Configuration1/executable ../Configuration1/data

这使得更新文件变得更加困难,因为您需要更新所有路径指定的文件。此外,同一文件的所有硬链接必须位于同一文件系统上。

相关内容