ディレクトリのすべてのサブディレクトリを$ PATHに設定するにはどうすればよいですか?

ディレクトリのすべてのサブディレクトリを$ PATHに設定するにはどうすればよいですか?

$ PATHにディレクトリを追加すると、そのサブディレクトリが再帰的に追加されないように見えます。それで、私はこれを行うことができますか?それともサポートしていない理由がありますか?

答え1

一般的なUNIXディレクトリ構造は、アプリケーションファイルを実行可能binファイル、libライブラリ、docドキュメントなどのタイプ別にディレクトリにソートします。つまり、別のディレクトリにインストールされます。多くの場合、アプリケーションは複数のディレクトリにグループ化されます(多くのシステムには、および$PATH3/usr/local/binつのディレクトリしかありません)。ディレクトリに実行可能ファイルとサブディレクトリの両方がある場合はほとんどありません。/usr/bin/bin$PATH

bin場合によっては、指定されたディレクトリのサブディレクトリ内のすべてのサブディレクトリを次の場所に含めると便利です$PATH

for d in /opt/*/bin; do PATH="$PATH:$d"; done

しかし、これはほとんど起こりません。実行可能ファイルが非標準ディレクトリにある場合の一般的なアプローチは、パスのディレクトリ$PATHにシンボリックリンクを作成することです。/usr/local/binstowxstowこれに関連して、ユーティリティ(または)が役に立ちます。

答え2

find を使用して、次のように再帰的に追加します。

PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )

警告:質問のコメントで述べたように、これは追加されたディレクトリの実行可能ファイルが悪意のあるものではないという保証がないため、セキュリティ上のリスクをもたらすため、お勧めできません。

Gillesに従う方が良い解決策かもしれません。回答そして使用お店

答え3

これがサポートされていない理由の1つは、bin /(および同様の)ディレクトリがシンボリックリンクを使用して、インストーラの実際の実行可能ファイルを含む特定のディレクトリを指すためです。

したがって、(おそらくそうします)を$PATH含めると、そのフォルダはRubyを実行するコードを含む特定のディレクトリ(たとえば)を指すシンボリックリンク(たとえば)でいっぱいになります。/usr/local/binruby../Cellar/ruby/2.1.3/bin/ruby

そのため、各実行可能ファイルのフォルダを指定する必要はありません$PATH。通常、bin / typeディレクトリにあるシンボリックリンクはそれを処理します。

答え4

Mac OSでは答えがうまくいかなかったので、うまくいく方法を見つけました。

export PATH=$PATH:$(find $HOME/apps -type d -maxdepth 1 | paste -sd ":" -)

お役に立てば幸いです!

メモ:これにはフォルダ自体も含まれます。

関連情報