Bash で pathctl という PATH 操作ツールと bb という簡易ベンチマークツールを書いた
小さな Bash のスクリプトを2つ書いたという小ネタです。
使い方
1. pathctl
環境変数に対する push
, pop
, shift
, unshift
操作を提供します。
#!bash source pathctl.shrc pathctl_push /path/to/your-bin # 末尾に追加 pathctl_unshift /path/to/your-bin # 先頭に追加 pathctl_pop # 末尾から除く pathctl_shift # 先頭から除く
2. bb
簡易ベンチマーク。
time コマンドを付けて引数で与えられたコマンドを一定回数実行して結果を出力するだけ。
## 例 $ bb.bash true "test -f bb.bash && echo true" "cat README.md" Exec 'true' 1000 times ... real 0m0.037s user 0m0.016s sys 0m0.019s Exec 'test -f bb.bash && echo true' 1000 times ... real 0m0.044s user 0m0.023s sys 0m0.019s Exec 'cat README.md' 1000 times ... real 0m1.972s user 0m0.820s sys 0m1.111s
source bb.bash
すると bb
という関数が読み込まれるので、この関数を使っても同じことができます。
回数を変えたいときは loop=$N bb ...
で($N
は数字)。
pathctl の高速化について
pathctl
を作ったきっかけは Qiita に書いたこちらの記事の状況でした。
これを最初に書いた直後に @sonots さんからコメント頂き、「RedHat 系 OS だったら pathmunge という関数があるよ」と知りました。
コードを見てみたところ、 pathctl
よりもシンプルで速そうだったので、この方式に修正してみることにしました。
実際どのくらい違うのか測ってみるついでに bb
を作った、という経緯です。
結果は こちらのイシュー に書いていますが、下にコピペします。
# pathmunge x 1000 Exec '. tmp/pathmunge.bash && pathmunge foo' 1000 times ... real 0m0.138s user 0m0.102s sys 0m0.031s # pathctl x 1000 高速化前 Exec '. pathctl.bash && pathctl_push foo' 1000 times ... real 0m5.024s user 0m2.249s sys 0m3.061s # pathctl x 1000 高速化後 Exec '. pathctl.bash && pathctl_push foo' 1000 times ... real 0m0.921s user 0m0.498s sys 0m0.311s
元々 pathmunge の1/40ぐらいのスループットだったのが、1/7ぐらいまでにはなった、というところです。
機会がありましたら、ご自由にご利用ください。