GNU/Linux >> Linux の 問題 >  >> Linux

慣用的なUnixプログラムは、インストールされているプレフィックスをどのように検出しますか?

非標準のプレフィックスを持つバイナリをインストールした場合、たとえば/opt/bin/foo/opt/share/fooからの静的ファイルが必要です 、どのようにそれらを見つけますか?実行可能ファイル(../share/foo)に関連する後方参照を使用する )?コンパイル時にハードコーディングされていますか?

慣用句とは アプリケーションが可変インストールプレフィックスを処理する方法は?すべてのディレクトリにプレフィックスを付ける必要がありますか? (/varはどうですか ?)

承認された回答:

コンパイル時にこのような参照をハードコーディングするのが一般的であり、コンパイル時のデフォルトをオーバーライドするコマンドラインオプションまたは環境変数を提供する可能性があります。多くの場合、プログラムは1つの構成ファイルの場所(通常は/etcの下)を記憶しているだけです。 )コンパイル時のデフォルトをオーバーライドできる場合。このアプローチは、LinuxディストリビューションまたはBSDポートの一部として、オペレーティングシステムを作成するのと同じ人々によってコンパイルされるオープンソースソフトウェアに最も適しています。

バイナリ形式で配布されるアプリケーションの場合、通常のアプローチは、ゼロ番目の引数からアプリケーションバイナリを見つけることです。慣例により、execveの0番目の引数 (つまり、argv[0] )はバイナリへのパスです(規則を尊重するのは呼び出し元、多くの場合シェル次第です)。 argv[0]の場合 /は含まれていません 、アプリケーションは$PATHを実行する必要があります それを調べてください。


Linux
  1. Vimモードとは何ですか?それらを変更する方法は?

  2. シンボリック リンク (ソフト リンク) とは何か、および Linux でそれらを作成する方法

  3. シェル スクリプトとはシェル スクリプトの作成方法

  1. Dockerログ:ログとは何かとその使用方法(例を含む)

  2. ゾンビプロセスとは何ですか?ゾンビプロセスを見つけて殺す方法は?

  3. DNS サーバーの種類とは

  1. あなたの好きな*痛みを伴う*Unixの瞬間は何ですか?

  2. Linux でプログラムの起動を検出する方法は?

  3. ホスト名 - それらはすべて何ですか?