ディレクトリを$ 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配列に追加されます。