これに回答すべての/opt/tool/binサブディレクトリをPATHに追加する方法を提供します。
for d in /opt/*/bin; do PATH="$PATH:$d"; done
しかし、ギルスはこう言いました。
しかし、これはほとんど行われません。非標準ディレクトリの実行可能ファイルが$ PATHにある場合、一般的なアプローチはパスのディレクトリ(/usr/local/binなど)にシンボリックリンクを作成することです。これお店これに関連して、ユーティリティ(またはxstow)が役に立ちます。
最後のものその他答えはこの主張を支持します。
/opt/*/bin
ただし、実行可能ファイルへのシンボリックリンクが望ましい理由はわかりません。これにより、不要な追加メンテナンスが追加されるようです。
PATHを更新するのではなく、optで実行可能ファイルにシンボリックリンクが優先される解決策であるのはなぜですか?
答え1
質問に答えようとしていますが、どのソリューションが「最適」なのかを説明するのではなく、Gilesがシンボリックリンクを使用してツールセットを提供し、メンテナンスの側面を解決するように提案する理由を説明するためです。結局のところ、システムに適したソリューションが何であるかを判断するのは、ローカル管理者の役割です。
bin
新しいツールを追加するには、ユーザーのディレクトリを追加してすべてのPATH
ユーザーの変数を更新する必要がありますPATH
(この変数は、新しいシェルセッションが開始されるまで適用されません)。
GNUを使用すると、Gillesが提案したように、たとえばツールごとに1つのディレクトリ、各ツールには独自のサブディレクトリなどのディレクトリstow
構造があります。各ツールは通常、インストールプレフィックスを指定してインストールされます。/opt/stow
bin
lib
/opt/stow/toolname
/opt
サブディレクトリはそのディレクトリとシンボリックリンクされているため、stow
メンテナンスコストが最小限に抑えられます。追加する必要がある唯一のディレクトリはPATH
。/opt/bin
/opt/sbin
一般的には
/opt/stow/tool-A-1.23
/opt/stow/tool-A-1.25
/opt/stow/tool-B-3.0
それから:
cd /opt/stow
stow tool-A-1.23
stow tool-B-3.0
これにより、/opt
適切なシンボリックリンクで階層がいっぱいになり、アクセスできます/opt/bin
。これは、ツール実行可能ファイル間の名前の競合がないと仮定しますが、これらのすべてのパスをPATH
。
1.23から1.25に切り替えるにはtool-A
、
cd /opt/stow
stow -D tool-A-1.23
stow tool-A-1.25
手動でシンボリックリンクを維持したり、ユーザーの変更を行う必要はなく、PATH
変更はすべてのユーザーにすぐに適用されます。
答え2
すべてを置く/opt/*/bin
ことの欠点PATH
は、新しいアプリケーションがインストールされるか、別のアプリケーションが更新されるたびに(パスが変更される)リストを変更する必要があることです。
ユーザーは再度ログインするか、手動でパスを更新する必要があります。単純なログイン - 何か - ログアウトのユースケースではこれは問題ではないかもしれませんが、screen
orbを実行している人のように長期実行セッションの場合はtmux
問題になります。 (以前のバージョンで実行されているシェル(またはEmacs)がある可能性があり、ターミナルPATH
マルチプレクサ自体も以前のバージョンを使用しますPATH
。これはユーティリティを直接実行する場合に重要です。)
これにより、ユーザーが表示したくない視覚的に不快なディレクトリのリストが生成される可能性があります。PATH
に設置することに気を付ける必要がない場合/opt
。
またPATH
、で明示的に設定する必要がある場合は、実際のディレクトリリストを作成して更新するのではなく、このような内容を作成する方がcrontab
簡単です。 NETではループとグローブは使用できません。/bin:/usr/bin/:/opt/bin
/opt
crontab
管理費の場合、コサロナンダ議論stow
ln -s ../someutil-1.2.3/bin/* .
ただし、これがない場合でも、内部で実行して必要なシンボリックリンクを作成できます/opt/bin
。 (以前のものを削除するわけではありませんそれマイナーですが、ユーティリティディレクトリを削除するときに壊れたリンクを残すことは、シェルの動作に影響を与えず、わずかにきれいではありません。 )
答え3
解決すべき主な問題は、プログラム名の競合です。
PATH
1977年以来、Bourne Shellにバイナリパス位置のハッシュが存在したため、大きな値を持つことはもはや問題になりません。
次の1つの理由を除いて、シンボリックリンクは一般的ではありません。
クラスタービューとは異なる独自のプログラム選択機能があります。
たとえば、PATHを次のように設定した場合:
PATH=/usr/gnu/bin:/usr/bin
標準システムツールの前にすべてのGNUツールを見つけることができます。
chmod
これにより、GNUツールを簡単に使用できますが、たとえば、ACLをサポートせずにtar
移植性の問題を持つアーカイブを生成することが知られているGNUを使用するGNUを使用する必要がある結果も発生します。
xgettext
あなたは基本的にGNUに興味がありますが、GNUツールには知られていない拡張システム機能のサポートを含む公式のシステムツールを使用することを好むとしましょう。たとえば、次のように独自のbinディレクトリを作成します。
mkdir ~/bin
その後、シンボリックリンクを作成する場合:
cd ~/bin
ln -s /usr/gnu/bin/xgettext
次のパスを設定します。
PATH=~/bin:/usr/bin:/usr/gnu/bin
xgettextを呼び出すとGNU xgettextが得られますが、たとえば呼び出すか、xgettext
公式のシステムツールを取得します。 GNUツールへのシンボリックリンクがあることがよくありますが、デフォルトのプレフィックス(例:to)があるため、tarを呼び出して意図的にGNU tarを使用できます。chmod
tar
/usr/bin/
/usr/bin/gtar
/usr/gnu/bin/tar
gtar
注:/opt/bin
UNIX FHS規格の一部ではありません。
/opt/<vendor>/bin
まさか
/opt/<project>/bin
しかし、後者の例もあります。