2002/08/30
dx は SSI (server side include) の機能を念頭に置いて、処理の対象とするドキュメントを HTML 形式に拘らずに、一般的なドキュメント処理を行うツールとしてデザインしました。
dx は SSI と同様に、ドキュメントの中に埋め込まれた環境変数をその値で置き換え、またコマンドはその出力で置き換えます。しかし NCSA の SSI に比べると構文がシンプルでかつ遥かに強力な機能を持っています。
注意: 0.5版であると言う事は、まだ試作品の域を出ていない事を意味しています。
dx [-s][-e] [file [arg ... ]]
-s
: ファイルの先頭の1行をスキップします。-e
: エラーが発生した場合に処理を止めます。
$variable
${commandline}
$[condition]{commandline}
variable
は環境変数で、commandline
はコマンド行、condition
はコマンド行を実行する条件です。$
に続けて環境変数名または "{
" または "[
" でなくては変換を受けません。]
" と "{
" の間に空白を入れるとエラーになります。
{commandline}
は複数の行に跨がっても構いませんが、[condition]
は1つの行に書きます。
コマンドは1つの行内に書いて下さい。
$$
は$
に変換されます。また行末の $
は改行を抑制します。
$variable
はその内容に置き換わります。環境変数が存在しない場合には空文字列に置き換えられます。
環境変数名は単純形、即ち、英数字および下線記号からのみ構成されると仮定されています。
環境変数 $0, $1, $2, ...
$0 dx を起動した時の <code>file</code> $1 dx を起動した時の最初の <code>arg</code> $2 dx を起動した時の第二の <code>arg</code> $3 ...
環境変数は現在のところ rc のような配列ではありません。(これは将来改善すべき部分です。) 従って
${cmd='ls -l' $cmd}を実行しても rc と同様に 'ls -l' なんてないよとエラーになります。
cmd=(ls -l) $cmdとします。)
${commandline}
はコマンドの出力に置き換わります。<{|}>[]^()&`*?(引用符で括った文字列の中では使用できます。引用符の使い方は rc と同じです。)
コマンド、引数、変数、値に対して環境変数を使用できます。
環境変数の評価は rc と同様に引数毎に行われます。(この事はセキュリティの面から非常に大切です。)
環境変数$status
には、外部コマンドの終了ステータスがセットされます。
コメントは rc と同様に "#
" で使用できます。
"#
" 記号から "}
" (コマンドが次の行に跨がる場合には行末)までがコメントとして扱われます。コメントの中に "}
" を含む場合には引用符で括って下さい。
dx はコマンドパスを rc と同様に (., /bin)
の順で見ます。
注: コマンドとしては rc のスクリプトも使用できるので、これだけでも意外と強力なのです。
$[condition]{commandline}
は condition
の評価が真であればコマンドの出力に置き換わります。condition
として現在サポートしているのは環境変数を評価する仕組、即ち、~ subject pattern pattern ...の形式と、コマンドの実行結果を調べる仕組み
command argument ...だけです。後者の場合には、command が正常終了した場合に「真」と評価されます。
!
を使用できます。演算子 !
は先頭に書きます。
単に ! だけの
$[!]{echo OK}のような条件文は意味を持っています。(直前の条件を否定します。)
rc と同様に環境変数 v が存在しても存在しなくても
~ $v *は真になります。存否を確認したい場合には
~ $v ?*として下さい。(
*
は長さ 0 の文字列にもマッチングします。)
exit
del
cd
echo
exit
は dx の処理を終了します。del
は環境変数を消去します。(rc のように rm
を使うのでは他の OS へ移植できません。)echo
を内部コマンドにしたのは、終了ステータスを echo
によって変化させたくなかったからです。
#!/bin/dx -sとします。この行を dx の処理の対象から外すために
-s
が付けられています。