从 bash 包中的 cli 访问安装文件夹

从 bash 包中的 cli 访问安装文件夹

我正在创建一个纯粹用 bash 编写的包(weffe),其中包含脚本需要访问的可执行文件和静态文件。但是,如果使用 git 克隆包或者将其安装到文件夹/usr/bin/weffe中的数据,我希望该脚本能够使用本地文件运行/usr/share/weffe。如果包是从命令行运行的,例如,如果weffe在终端上运行,那么二进制文件是否可以/usr/share/weffe通过运行类似命令whereis或访问 shell 变量来了解其自己的安装目录(在本例中)?

如果这不可能,最好的选择是什么?我考虑过的一些事情是制作一个 Makefile,在构建过程中手动为安装目录创建一个变量,或者/usr/share/weffe在尝试从该位置访问文件之前检查硬编码目录是否存在。任何帮助,将不胜感激。

答案1

考虑将weffe可执行文件定位/usr/share/weffe/weffe-or-other-name在目录中,然后链接到该bin目录,例如cd /usr/bin; ln -s ../share/weffe/weffe.

您的脚本可以使用该命令找到其位置dirname。当它是符号链接时,将返回符号链接路径。因此,如果您想找到它的“真实”路径,那么您可以使用dirname和的组合readlink

#!/usr/bin/env bash

# Assuming you have soft linked in the bin dir.
# cd /usr/bin; ln -s ../share/weffe/weffe

# /usr/share/weffe/weffe
script_path="$(dirname "$0")"
# GNU readlink requires a -f argument.
# macOS realink does not require -f argument.
script_real_relative_path="$(readlink "$0")"
echo "script path: $script_path"
echo "script real path: $script_real_relative_path"

相关内容