2008年4月28日

パスの通っているコマンドを全て表示する

awkが必要ですが、簡単に書けました。しかし、シェルスクリプトではいつもクォーテションに悩まされます。まだまだ書いている量が足りないことを痛感してしまいます。

下記スクリプトの問題点として、Windows環境(cygwin)だとパスに空白が含まれる(Program Files)ためこのままでは使えません。適当に環境に併せて中間処理を挟む必要があります。

#!/bin/sh
# command-list.sh

temporary="temporary.data"

for p in `echo $PATH | awk -F : '{for(i=1; i<=NF; i++) print $i}'`
do
    ls $p >> $temporary
done

sort $temporary | awk '{printf "%04d    %s\n", NR, $1;}'

rm -f $temporary

手許の環境 (Mac OSX) で実行してみると次のようになりました。

$ ./command-list.sh | wc -l
    2205
つまり、利用可能なコマンドは2205個存在しています。自分が使っているものなんて氷山の一角にも満たないことがわかります。


man以外のawkに関するドキュメント NR, NFに関しては非常に便利なので覚えておきたい。

コメントを投稿