Kenji Arisawa E-mail: arisawa@aichi-u.ac.jp Aichi University Kurozasa 370, Miyoshi-cho Aichi, Japan 2002/03/19Powered by Pegasus
注意: 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 を起動した時のfile
$1 dx を起動した時の最初のarg
$2 dx を起動した時の第二のarg
$3 ...
環境変数は現在のところ rc のような配列ではありません。(これは将来改善すべき部分です。) 従って
コマンド、引数、変数、値に対して環境変数を使用できます。
コメントは rc と同様に "
dx はコマンドパスを rc と同様に
注: コマンドとしては rc のスクリプトも使用できるので、これだけでも意外と強力なのです。
単に ! だけの
rc と同様に環境変数 v が存在しても存在しなくても
${cmd='ls -l' $cmd}
を実行しても rc と同様に 'ls -l' なんてないよとエラーになります。
(rc はこの場合、
cmd=(ls -l} $cmd
とします。)
■ コマンド行
${commandline}
はコマンドの出力に置き換わります。
コマンド行の処理はできるだけ rc をエミュレートしていますが、多くの機能が省略されています。
現在サポートされているコマンド行の形式は、
だけです。即ち、パイプや I/O の切り替えはサポートされていません。
コマンド行の中でサポートされていない記号は以下の通りです。
<{|}>[]^()&`*?
(引用符で括った文字列の中では使用できます。引用符の使い方は rc と同じです。)
環境変数の評価は rc と同様に引数毎に行われます。(この事はセキュリティの面から非常に大切です。)
環境変数$status
には、外部コマンドの終了ステータスがセットされます。
#
" で使用できます。
"#
" 記号から "}
" (コマンドが次の行に跨がる場合には行末)までがコメントとして扱われます。コメントの中に "}
" を含む場合には引用符で括って下さい。
(., /bin)
の順で見ます。
■ 条件
$[condition]{commandline}
は condition
の評価が真であればコマンドの出力に置き換わります。
condition
として現在サポートしているのは環境変数を評価する仕組、即ち、
~ subject pattern pattern ...
の形式と、コマンドの実行結果を調べる仕組み
command argument ...
だけです。後者の場合には、command が正常終了した場合に「真」と評価されます。
何れの場合にも否定演算子 !
を使用できます。演算子 !
は先頭に書きます。
$[!]{echo OK}
のような条件文は意味を持っています。(直前の条件を否定します。)
~ $v *
は真になります。存否を確認したい場合には
~ $v ?*
として下さい。(*
は長さ 0 の文字列にもマッチングします。)
■ 内部コマンド
内部コマンドには終了ステータスがありません。
以下の3つの内部コマンドを持っています。
exit
del
cd
echo
exit
は dx の処理を終了します。
del
は環境変数を消去します。(rc のように rm
を使うのでは他の OS へ移植できません。)
echo
を内部コマンドにしたのは、終了ステータスを echo
によって変化させたくなかったからです。
■ 効率
dx は rc に比べて効率よく処理します。それは dx が Web のサーバで使用される事を念頭に置いているからです。単に軽いだけではなく、出力をバッファリングします。
それによって、小さなパケットがネットワークに流れる事を防いでいます。
他方バッファリングの結果として、バックグランドジョブを実行しても、全てのジョブが終了するまで次に進みません。(そのような仕事には向いていないと言う事です)
■ 日本語文字コード
dx は utf-8 および euc(ujis) を処理します。
jis は使えません。 sjis は問題が発生するかも知れません。
■ 使用上の注意
dx を CGI として使用する場合には第1行目を
#!/bin/dx -s
とします。この行を dx の処理の対象から外すために -s
が付けられています。