which コマンドの実装
which コマンドの実装の書き直し - forest book からです。 以前、which コマンドはawk だけで which (w - 日本 GNU AWK ユーザー会 0.2 で実装しましたが、この場合、引数を 1 つしか取ることができなかったので、複数の引数を取ることができるように改良してみます。
#! /usr/local/bin/nawk -f
# which_2.awk
# which コマンドの代替
# usage: nawk -f which_2.awk file[...]
BEGIN {
num_path = split(ENVIRON["PATH"], arr_path, ":");
for (i = 1; i < ARGC; i++) {
is_exist = 0;
for (j = 1; j <= num_path; j++) {
full_path = arr_path[j] "/" ARGV[i];
if (getline < full_path > 0) {
print full_path;
close(full_path);
is_exist = 1;
break;
}
}
if (is_exist == 0) {
print "cannot find " ARGV[i] " command"
}
}
}
以前のものと比較すると、for 文がさらに加わったものになっています。 実行すると以下のようになります。
$ nawk -f which_2.awk awk nawk mawk gawk xgawk jawk /usr/local/bin/awk /usr/local/bin/nawk /usr/local/bin/mawk /usr/local/bin/gawk /usr/local/bin/xgawk cannot find jawk command
awk 関連は基本的に自分でビルドしているため、/usr/loca/bin に集中していることが分かります。 なお、jawk は Java による awk の実装ですが、まだ試していません。




