Bashパッケージのcliからインストールフォルダにアクセスする

Bashパッケージのcliからインストールフォルダにアクセスする

私は、スクリプトがアクセスする必要がある実行可能ファイルと静的ファイルを含むbashでのみ作成されたパッケージ(weffe)を作成しています。ただし、パッケージがgitを使用して複製された場合、またはdataフォルダにインストールされている場合は、/usr/bin/weffeローカルファイルを使用してスクリプトを実行したいと思います/usr/share/weffe。パッケージがコマンドラインで実行されている場合(たとえば、端末で実行されてweffeいる場合)、バイナリは/usr/share/weffe同様のコマンドを実行するか、シェル変数にアクセスしてwhereis独自のインストールディレクトリ(この場合)を知ることができますか?

これが不可能な場合、最良の選択は何ですか?私が考慮したいくつかのことは、ビルド中にインストールディレクトリの変数を手動で生成するMakefileを作成するか、その/usr/share/weffe場所からファイルにアクセスする前にハードコードされたディレクトリがあることを確認することです。どんな助けでも大変感謝します。

答え1

ディレクトリ内のweffe実行可能ファイルを見つけて、そのディレクトリに接続することを検討してください。/usr/share/weffe/weffe-or-other-namebincd /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"

関連情報