私は、スクリプトがアクセスする必要がある実行可能ファイルと静的ファイルを含む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-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"