Path

如何將目錄的所有子目錄設置為 $PATH?

  • March 13, 2021

看起來在將目錄添加到 $PATH 時,它的子目錄不會遞歸添加。那我可以這樣做嗎?或者有什麼不支持的原因?

使用 find 遞歸地添加它們,如下所示:

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

警告:正如對問題的評論中提到的那樣,不鼓勵這樣做,因為它會帶來安全風險,因為不能保證添加的目錄中的執行檔不是惡意的。

遵循 Gilles 的回答並使用stow可能是更好的解決方案

通常的 unix 目錄結構將應用程序文件按種類分類到目錄中:bin執行檔、lib庫、doc文件等。那時它們被安裝在不同的目錄中;$PATH通常應用程序被分組到幾個目錄中(因此許多系統在:/usr/local/bin/usr/bin中只有三個目錄/bin)。一個目錄中很少同時包含執行檔和子目錄,因此不需要將目錄的子目錄包含在$PATH.

有時可能有用的是bin將給定目錄的子目錄的所有子目錄包含在$PATH

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

但是,很少這樣做。當執行檔在非標準目錄中時,通常的方法是$PATH在路徑中的目錄中創建符號連結,例如/usr/local/bin. stow實用程序(或)在這xstow方面可能很有用。

引用自:https://unix.stackexchange.com/questions/17715