みなさん、こんにちは。第3回の講座です。
今回は簡単なマクロを書いてみましょう。今まで例として fileinfo
コマンドを使ってきましたが、fi
で済ましている人って多くないですか?fi
は HPE が提供する標準マクロではありません。fi
を使うということは、誰かが作った fi
マクロを知らず知らずのうちに使っているのです。
同じような例は……
v ⇒ volume
f ⇒ files
fs ⇒ fup subvols
などをよく見ます。では fi
の代わりに ls
で fileinfo
できるようにしてみましょう。
第1回で、「macro
や routine
などはファイルであったり variable
であったりします。」と書きました。ファイルか variable
か、それはそれぞれ使い勝手というものがありますからケースバイケースで判断すればいいのですが、話の順番として、最初はファイル形式で実装してみます。次のような2行だけのファイルを用意してください。
それに ls
という名前を付けてどこかの subvol
に置きましょう。
そして実行です。
どうでしょうか。($data01.case1
の部分はみなさんの環境に合わせて適当に指定してください。)この結果と fileinfo
の結果を比べてみましょう。
どうですか?同じ結果になると思います。もうひとつやりましょう。
これも fileinfo
と比較します。
同じ結果にはなりませんね。ファイル名の部分が2つになりましたが、 ls
では2つ目の $data01.case2.*
の部分が表示されません。
さきほどの %1%
という部分がパラメータの指定で、「第1パラメータを処理しなさい」という意味になります。%2%
と書いてないので、第2パラメータの $data01.case2.*
は処理されなかったわけですね。ならばパラメータが増えるかもしれない分 %3% %4%
と書かないといけない……
パラメータ数の最大値が分かるならそれもありですが、ls
では最大値は固定できません。そこでこうします。
これで「すべてのパラメータを処理しろ」という意味になります。なので、パラメータがいくつになってもちゃんと処理してくれます。これがうまくいくのは、勿論 #xfileinfo
が複数パラメータに対応しているからです。
1行目が ?tacl macro
なので、この ls
は macro
です。これが ?tacl routine
なら ls
は routine
になります。ただ、%1%
とか %*%
は macro
でしか使えないので
と書いて実行してもエラーになります。routine
の場合の書き方は後日説明します。
ここで、「fileinfo
は alias
なんだから、ls
も alias
にするのがよいのでは?」と思った方はいませんか?
その通り、あなたは鋭い。世間に転がっている fi
マクロは macro
形式で実装されているのをよく見ます。パラメータのハンドリングを変えたいならともかく、単に読み替えているだけなら alias
形式で実装するのが筋というものです。ここでは解説しませんが、実際 alias
でないといけない理由もあるので、macro
形式は正しい設計ではないと言えます。
しかし、ファイル形式のマクロは alias
が使えません。macro
か routine
のみファイル形式で扱えます。そこでここでは仕方なく macro
形式で実装しています。また、「run $vol.subvol.ls
って、面倒くさい、単に ls
では駄目なの?」と思ったあなた、それは正しい。正しくて鋭いあなたのために、その点を次回に variable
形式で解決しましょう。
なお、システム subvol
にファイルを置くことで、ファイル形式でも ls
だけで使えるようにする方法もあります。これについてはいつか触れることがあるかもしれません。
では次回 variable
形式でお会いしましょう。Au revoir!