ネットで落としてきたフリーのツール類、アーカイブを解凍してみたら、実行ファイルが1つだけと思いきや、実行ファイルや DLL ファイル、そのほか設定ファイルと思わしきものなどが解凍されたディレクトリ以下に複数ディレクトリ/ファイルとして格納されていて、どれがラインタイムで必要なものか判らない。 そんなことがたまにある(bind9 とか nmap とか)。
こんなとき、メンドくさいから、解凍してできたトップディレクトリを丸ごと /usr/local/bin なんかにストアするのだけど、こんなのが複数ある場合に、それぞれに PATH を通すのは面倒だし、その後も同種のツールが増える都度、PATH に追加するのはさらに面倒。
例えば /usr/local/bin の下に、
/usr/local/bin/tool_1/
/usr/local/bin/tool_2/
/usr/local/bin/tool_3/
/usr/local/bin/tool_3/subDir
のようにディレクトリがある場合には、それらのサブディレクトも含めて、
PATH=$PATH:/usr/local/bin/*
のようなイメージで記述すれば、一発で、
PATH=$PATH:/usr/local/bin:/usr/local/bin/tool_1:/usr/local/bin/tool_2:/usr/local/bin/tool_3:/usr/local/bin/tool_3/subDir
のように展開されれば楽なのに。
そこで、あるディレクトリ以下のサブディレクトリを再帰的にリストして、それらを':'で区切られた1行のテキスト(「コマンドサーチパス型式」と表現してみる)に整形できれば、と考えた。
先哲の知恵を求めて色々ネットをググったのだが見つからない。
そこで、ここ( https://hacolab.hatenablog.com/entry/2019/07/29/235312 )なども参考にして、こんなコマンドラインを発案。
\$ find /usr/local/bin -type d -print | sed -e ':loop' -e 'N; $!b loop' -e 's/\n/:/g'
結果は良好。
これをバッククオートで挟んで、.bash_profile なんかに
PATH=\$PATH:`find /usr/local/bin -type d -print | sed -e ':loop' -e 'N; \$!b loop' -e 's/\n/:/g'`
と書いとけば、期待通りのコマンドサーチパスが $PATH にセットされる。
↧