ディレクトリを$ PATHに追加すると、そのサブディレクトリは再帰的に追加されないようです。それで私はそれができますか?または、これがサポートされていない理由はありますか?
ディレクトリを$ PATHに追加すると、そのサブディレクトリは再帰的に追加されないようです。それで私はそれができますか?または、これがサポートされていない理由はありますか?
回答:
次のようなfindを使用して再帰的に追加します。
PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )
警告:質問へのコメントで述べたように、追加されたディレクトリ内の実行可能ファイルが悪意がないという保証がないため、セキュリティリスクが生じるため、これは推奨されません。
$PATH
は危険ですが、サブディレクトリを追加することはそれほど悪くありません。しかし、通常は役に立たず、おそらく非効率的です(場合によっては、環境のサイズ制限に追い込まれることさえあります)。
~/bin
または~/scripts
)にも追加できるため、セキュリティは同じです。
~/scripts
。私はしませんし、誰もする必要があります
通常のUNIXディレクトリ構造には、種類ごとにディレクトリに分類されたアプリケーションファイルがあります。bin
実行可能ファイル、lib
ライブラリ、doc
ドキュメントなどです。それらが別々のディレクトリにインストールされるときです。多くの場合、アプリケーションはいくつかのディレクトリにグループ化されます(多くのシステムでは、$PATH
:/usr/local/bin
、/usr/bin
およびに3つのディレクトリしかありません/bin
)。ディレクトリ内に実行可能ファイルとサブディレクトリの両方があることはめったにないため、ディレクトリのサブディレクトリをに含める必要はありません$PATH
。
時折役に立つのは、指定されたbin
ディレクトリのサブディレクトリのすべてのサブディレクトリを以下に含めることです$PATH
:
for d in /opt/*/bin; do PATH="$PATH:$d"; done
ただし、これはめったに行われません。非標準ディレクトリ内の実行可能ファイルを配置する通常の方法$PATH
は、などのパス内のディレクトリにシンボリックリンクを作成すること/usr/local/bin
です。この点でstow
ユーティリティ(またはxstow
)が役立ちます。
これがサポートされていない理由の1つは、bin /(および同様の)ディレクトリがシンボリックリンクを使用して、プログラムの実際の実行可能ファイルがインストールされている特定のディレクトリを指すためです。
したがって、$PATH
インクルード/usr/local/bin
(ほとんどの場合)には、そのフォルダーruby
に、Rubyを実行するコードが見つかった特定のディレクトリを指すシンボリックリンク(など)がいっぱいです(など../Cellar/ruby/2.1.3/bin/ruby
)。
これが、各実行可能ファイルのフォルダをで指定する必要がない理由です$PATH
。bin /タイプディレクトリに通常見られるシンボリックリンクがそれを処理します。
でzshの、$ PATHは配列として追加することができます。シェルグロビングを使用して、複数のサブディレクトリを$ PATH配列に追加できます。
例:
で.zshrc
:
typeset -U PATH path
BINPATH="$HOME/bin"
path+=("$BINPATH" ${BINPATH}/*/)
export PATH
これにより、$ BINPATHのすべてのサブディレクトリが$ PATH配列に追加されます。