回答:
このスクリプトはtree
...を使用します
sudo apt-get install tree
変更することでディレクトリの深さを変更-L 1
でき、使用するかどうかを選択できます~/
...
更新2:
.. 先頭の / home / user /(「any」ではない)のみを置き換えるようにスクリプトを変更し、
引数を追加しました。
UPDATE追加されたチェック:.. PATHにすでにある場合は、PATHにディレクトリを追加しないでください。このチェックでは、「〜/」と「/ home / user /」が異なると見なされます。
あなたの質問1について...はい、それは本当です。特定の各ディレクトリは、PATHで個別に指定する必要があります。
あなたの質問2再...ここにあなたが...やりたいするスクリプトである
私はそれをテストしてみたが、それはそれは、現在のセッションの新しいパスを行います立って...
あなたが使用することができ、それは永続的なものにするにはexport PATH
(ただし、の詳細については少し大ざっぱですexport
)
#
# name: path-add-dirs
# eg: $ path-add-dirs "$HOME/bin" "tilde" 1
# When directories are $HOME based, choose format.
# Add directories in tidle format: ~/...
# ...or as fullly-qualified: /home/user/...
# mode values: "tilde", or anything else for fully-qualified
mode="$2" # valid mode values: "tilde", or anything else
maindir="$1"; dirs= ; echo
# Buld string of subdirectories to a depth/level of 1
while IFS= read -r dir ; do
# Don't add directory if it is already in PATH
if [[ "$mode" == "tilde" ]] ; then
# replace only a *leading* :/home/user/
homecheck=":$dir"
dircheck="${homecheck/:$HOME\//:~/}"
dircheck="${dircheck#:}"
else
dircheck="${dir}"
fi;
pathcheck=":$PATH:"
if [[ "$pathcheck" != "${pathcheck/:$dircheck:/}" ]] ; then
echo "ALREADY IN PATH: $dircheck"
else
dirs="$dirs:$dir"
echo " added: $dircheck"
fi
done < <(tree --noreport -L $3 -fi -d "$maindir")
# Choose one of these two options
if [[ "$mode" == "tilde" ]]
then PATH="$PATH${dirs//:$HOME\//:~/}" # change :$HOME to :~/
else PATH="$PATH$dirs" # this method has fully expanded $HOME
fi
echo
echo "$PATH"
echo
UNIXベースのシステムはそのように動作するように設計されていないため、それは不可能です。通常、すべての実行可能ファイルは、少数のディレクトリの1つに置かれます。たとえば、私が自分の目的で書くものはすべて〜/ binにあります。
実際のバイナリとスクリプトをbinディレクトリに保存したくない場合は、たとえば〜/ binに実際のバイナリへのシンボリックリンクを作成できます。
$ PATHにすべてのサブディレクトリを含めることは、検索するディレクトリを追加するだけなので、特に望ましいわけではありません。他の実行可能ファイルがPATHに入らない可能性が高くなり、実際にはあまりメリットがありません。
これでうまくいくはずです
PATH="$PATH:$(find ~/bin -type d -printf ":%p")"
それを考慮に入れてください
このようにしてみてください:
export PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')"
これ~/.local/bin
により、すべてのサブディレクトリと一緒に自分自身がに追加され$PATH
ます。
説明:
du
各行にすべてのサブディレクトリ情報を表示します cut -f2
2番目の列、つまりサブディレクトリの名前を抽出します tr '\n' ':'
各リンクの区切りをコロンに変更します。これはすべての行を単一の行に結合し、サブディレクトリはコロンで区切られます sed 's/:*$//'
最後のコロンを削除します