Zaurus MORE ソフト MicroShell dash Version 1.21 R2505 for Zaurus 2001/05/05 小笠原博之 オリジナルのコマンドシェル dash の Zaurus 版です。dash はもともとは X68K 上 で開発され、現在は Windows 用のコマンドシェルとしても使われています。UNIX 風 のコマンド操作環境を備え、ファイル操作やシェルスクリプトプログラミングが可能 です。コマンドライン操作も、ヒストリ機能やファイル名補完を内蔵しています。 MORE ソフト開発時のファイル操作や確認用など、有効に活用してください。 R2505 の変更点 ・E1/C1/P10/L10/EX1/TR1 (2001/05/05現在) で拡張されたファイルシステムディレク トリに対応。カードや本体メモリのディレクトリ作成、削除、ディレクトリ操作が 可能。(旧機種でも動作可能) R2001 の変更点 ・縦画面対応。MI-E1 で起動すると縦画面になります。(従来機種ではそのまま横) R2000 の変更点 ・MI-EX1/TR1/C1/P10 でキー入力がデッドロックしてしまうことがあったのを修正。 ●注意点 ・このプログラムはフリーソフトウエアです。動作保証はありません。動作確認も不 充分です。このプログラムの使用に起因するありとあらゆるトラブル症状損害、重 要なデータが消えた、ザウルスが起動しなくなった、などなどすべて利用者の責任 とします。特に Zaurus 本体内の重要なファイルを削除改変してしまわないよう十 分ご注意下さい。また、あらかじめ重要なデータをバックアップしておくことをお 勧めします。 ・マニュアル中 Zaurus 独自の制限事項には☆記号で解説しています。 ●dash でできること&特徴 ・ファイル操作 本体メモリやカード内のファイルを自由にアクセスすることができます。ファイル のコピーやバックアップ、リネーム、テキストファイルの表示、ディレクトリの作 成削除や確認作など、普段は直接触れない内部のファイルを操作できます。 ・プログラミング シェルスクリプトを使ったプログラミングができます。原理は DOS でいうバッチ ファイル相当ですが、UNIX の bsh 風な構文で程度複雑な処理にも耐えます。文字 列操作や数値演算、関数定義などが可能で複雑なファイル操作を助けます。 ・UNIXライクなコマンド操作 UNIX の bsh 風のシェルコマンドを備えています。ファイル操作など、必要なコマ ンドをほとんどシェルに内蔵しており単体で動作が可能です。コマンドラインエディ タは簡素なものしかありませんが、ヒストリ機能、ファイル名補完機能を内蔵して います。 ・Zaurus 独自の拡張 ターミナルエミュレータを内蔵し、エスケープシーケンスによるターミナル制御が できます。その他コマンドの拡張により、スクロール領域の定義、フォントサイズ 変更、キーパッドの ON/OFF(全画面使用可能)、ペンタッチ入力も可能です。 ●dash 起動方法 MPFP2505.ZAC を Zaurus に転送してください。MORE ソフト画面で MPFP2505.ZAC を 展開すると dash を起動できるようになります。 初期化ファイル MPFPINIT.DSH は、必ず本体メモリ(F0:)から読み込まれます。カード にインストールした場合は、最初の起動直後に次のように実行して初期化ファイルを本 体にコピーしてください。この後 exit コマンドで dash を終了させ、もう一度 dash を起動し直します。 % cp F1:MPFPINIT.DSH F0: この MPFPINIT.DSH ファイルはテキストファイル(シェルスクリプト)なので、テキス トエディタで内容を書き換えることができます。 起動するとシンプルな画面にプロンプトが表示されます。コマンドを入力して [改行] キーをタッチするとコマンドを実行します。 (例) カード内のファイル一覧を表示 F0:> cd f1:/ [改行] F1:/> ls -l [改行] (例) dash のマニュアルを読む ([スペース]で次に進む。中止は[Q]) ここの[カード]キー入力はTABキーに相当し、ファイル名補完を行います。 F0:> more mpfpda [カード][改行] (例) dash のバージョンを表示する F0:> echo $VERSION [改行] (例) カレントディレクトリのファイル一覧を表示する F0:> ls [改行] 終了するには exit コマンドを入力してください。 F0:> exit [改行] ※「F0:>」はプロンプトです。プロンプトは初期化ファイル MPFPINIT.DSH 内で定義 されています。プロンプトが未定義の場合は「%」になります。 ●dash の削除について dash は MORE ソフト画面から削除できます。dash は展開時に以下のファイルも作成 します。マニュアルは削除時に一緒に消しますが、設定ファイル MPFPINIT.DSH は残 しますので必要に応じて手動で削除してください。 MPFPDASH.TXT このマニュアル MPFPINIT.DSH 初期化ファイル(シェルスクリプト) ●ZaurusOS 入門 ・ZaurusOS のバージョン ZaurusOS にはバージョンによっていくつか異なる点があります。便宜上以下のよう に分類するものとします。特にディレクトリの扱いと対応状況が異なっている場合が ありますので注意してください。 RAM if cf DIR 相当する機種 ---------------------------------------------------------------------- ZaurusOS Type 1 1M SH SH × MI-10 ZaurusOS Type 2 2M SH FAT △ MI-500/600/100 ZaurusOS Type 3 2M SH FAT △ MI-300/P1/P2/J1,MT-200/300,BrowserBoard ZaurusOS Type 4 8M FAT FAT ○ MI-EX1/TR1/C1/P10/L10 ZaurusOS Type 5 8M FAT FAT ○ MI-E1 if= 内蔵フラッシュのファイルシステム of= カードのファイルシステム SH: SHARP独自のファイルシステム FAT: DOS互換FATファイルシステム (ATAと呼ばれることもある) DIR= ディレクトリ対応状況 × 未対応 △ パスがわかっている場合のみ、カード限定 ○ ディレクトリ操作対応 Type1〜3 までのザウルスと、Type4 以降のザウルスには非常に大きな OS 上の違いが あります。そのため RAM 1〜2M の Zaurus を、旧仕様のザウルス、MI-EX1 以降の RAM 8M の Zaurus を、新仕様のザウルスと呼ぶこともあります。 Type1〜4 までのザウルスでは、フラッシュメモリは F0: (本体メモリ) と F1: (カー ドメモリ) の2種類だけです。Type 5 の MI-E1 では、C1: などの新しいドライブが追 加されています。 ・ファイル名について ZaurusOS のファイル名は、名前8文字+拡張子3文字でできています。 FILENAME.ABC この場合 ABC の部分が拡張子で、上記のように . で区切ります。名前は 8 文字よ り短くても構いません。 FILENAME の部分は大文字小文字の区別がありませんが、ZaurusOS のバージョンに よっては拡張子部分で区別されます。例えば FILENAME.doc と FILENAME.DOC は別ファ イルとして扱われることがあります。 注意しなければならないのは、ZaurusOS は原則としてディレクトリを使用せず専用の 単一ディレクトリにほとんどのファイルを納めます。そのためファイル名を適当につ けてしまうと既存のファイルと重なってしまう可能性があるということです。 SHARP ではファイル名生成規則というものを作っており、ファイル名の先頭 4文字を 固定で割り当てて、ファイル名がぶつからないようにしています。ローカルでユーザー が自由に使えるよう予約されているのは TUT1 です。そのため、もし何らかのファイ ルを作成する必要がある場合は、TUT100A.DOC などのように、TUT1 で始まるファイ ル名にしておくと安全です。 なお、この規則が必要なのは、ZaurusOS システムが使用する本体メモリ F0: とカー ドメモリのカレントディレクトリ(__ZAURUS) F1: (または C1: C2:)です。カードの ルート(F1:/ 等)やほかのディレクトリに対しては、この規則は適用されないので自 由な名前のファイルを作って構いません。 ・ディレクトリについて(E1/C1/P10/L10/EX1/TR1) 新 ZaurusOS を搭載した Zaurus では、ファイルシステムが拡張され直接ディレクト リを扱えるようになっています。2001/05/05 現在、新 ZaurusOS 対応の機種は以下 の通りです。 MI-E1 MI-C1 PowerZaurus MI-P10 igeti MI-EX1 ICRUISE MI-TR1 MI-L10 これらの機種では、dash 本来のディレクトリ機能 cd、mkdir、rmdir、lfor -R 等を 使用することができます。(一部制限あり) ・ディレクトリについて(旧Zaurus向け) コンパクトフラッシュなどのメモリカード使った場合は、本体内蔵メモリとカードメ モリの2種類の異なるファイルエリアを持つことができます。この両者は F0: と F1: という名前で区別され、いわゆる Windows や MS-DOS でいうドライブ名となります。 カードメモリである F1: は、このカードをパソコンで見てみると __ZAURUS という ディレクトリの中身であるということがわかります。このディレクトリは Zaurus が 勝手に作成します。本体内蔵機能でカードを選んだ場合のデータは原則としてすべて この中に作られます。本体内蔵機能では __ZAURUS の中(つまり F1:)以外はアクセス しません。(例外あり) しかしながら Zaurus の扱うカードそのものは MS-DOS の FAT ファイルシステムを 採用しているので、パソコンやデジカメなど多くの機器と共存可能です。 そのため、パソコンを使えばカードの中に他のディレクトリを作ることができます。 旧仕様の ZaurusOS (Type3以前)からは、これらのディレクトリの作成やその存在の 確認をすることができません。しかし、ディレクトリの作成と削除をパソコンで行い、 そのディレクトリの存在と名前がわかっているのであれば、フルパスで指定すること により ZaurusOS から __ZAURUS 以外の他のディレクトリ内のファイルも読み書きす ることができます。 新仕様の ZaurusOS (Type4〜5以降) では、PC 同様にディレクトリ操作を行うことが 可能です。 ・ドライブ名、ディレクトリ名の ZaurusOS 予備知識 ZaurusOS には原則としてディレクトリは存在しませんが、ATA カードをアクセスす る場合のみ既存のディレクトリをパスに含ませることができます。新たにディレクト リを作ったり、ディレクトリ一覧を取得することはできません。 ドライブ名は次のようになります。 F0: 本体メモリをアクセスします。カレントは常に F0:\__ZAURUS であ り、旧仕様ザウルスの場合ディレクトリを作ることができません。 アクセスできるのは F0: だけになります。新仕様ザウルスでは、 ディレクトリを作ることが可能で、ルート F0:\ へのアクセスも可 能です。 F1: カードメモリをアクセスします。ディレクトリ名を書かない場合は、 カードのうちザウルス専用のエリアをアクセスします。いわゆる カード内の __ZAURUS フォルダで、フルパスでは F1:\__ZAURUS と なります。本体機能で選択される [カード] というのは通常これを 指します。 F1:\ カードのルートディレクトリを指します。PC-Exchange では ATA と 表記されます。 F1:\??? カードの任意のディレクトリを指します。このように F1: に続けて パスを書けば、カードの任意のディレクトリを指定することができ ます。(例) F1:\PIC 多階層も可能ですが、トータルのパスの長さは 64 文字までに限定 されます。 C1: MI-E1 で追加されたドライブです。CFカードを指します。MI-E1 の F1: は、C1: もしくは C2: のどちらかと同一になります。 C2: MI-E1 で追加されたドライブです。SDカードを指します。 R1: MI-E1 で追加されたリモートドライブです。 S0: RAMドライブです。一時的なクリップボード(セレクトバッファ)など が格納されます。電源 OFF で内容は消去されます。 S4:〜 システムROMドライブです。内蔵機能のアプリケーションが格納さ れています。 上の説明では ZaurusOS の表記にのっとってディレクトリ記号を「\」で記載していま すが、dash ではディレクトリ記号には通常 \ でなく / の方を使用します。(\ も使 えますが、シェル置換が発生するので \\ と2つ重ねて書かなければなりません。) 例えばカードのルートは F1:/ と指定します。 ZaurusOS でファイルを指定するときは、このようにドライブ名(もしくはドライブ名 +ディレクトリ名)を必ずつけなければならないことになっています。 dash では、ドライブ名を省略した場合(ファイル名文字列に : が含まれない場合)は、 ファイル名にカレントディレクトリを追加します。例えばカレントが F0: のとき more MPFPDASH.TXT を実行すると「more F0:MPFPDASH.TXT」とみなされます。 ・コマンド 各コマンドはソフトキーボードから入力します。必ず半角で入力してください。ま た、大文字小文字の区別があるので、小文字で入力するのを忘れないで下さい。 ・良く使う主なコマンド ls カレントディレクトリ内のファイル一覧(ショート形式) ls -l カレントディレクトリ内のファイル一覧(ロング形式) ls F1:/PIC/*.* カードの PIC ディレクトリの中身一覧 cd F0: カレントディレクトリを本体のフラッシュメモリにします cd F1: カレントディレクトリをカードのメモリにします cd F1:/ カレントディレクトリをカードのルートディレクトリにします(ATA) df 各ドライブの空き容量確認 more file ファイルの中身を表示する(テキストファイル) set 定義されている環境変数一覧の表示 set var=data 変数 var へ data を定義する echo $var 変数 var の内容を表示する function 定義済み関数一覧の表示 chmod -r file 読み出しONLY属性消去 ・ファイル操作(扱いには十分注意が必要、上級者向け) rm file ファイルを削除します cp 元file 新file ファイルをコピーします cp 元file F1: カードにコピー mv 元file 新file ファイル名を変更します 注意: ファイル指定には、複数のファイルを一度に取り扱うワイルドカード 「*」や「?」が使えます。削除コマンドなど、ワイルドカードを使用 すると危険なものもあるので慎重に使用してください。 ・スクリプトの実行 source file 指定スクリプトを現在のシェルの中で実行します。実際は . file source と書く代りにピリオドを使い「. file」で構いま せん。 ●困ったときに使う dash カードの __ZAURUS フォルダに直接 ZAC ファイルをコピーして MORE ソフトを install すると、ファイルが消えなくなってしまうことがあります。 ・原因その1 拡張子が小文字になっている AAAA.zac のようなファイルになっていると、拡張子の大文字小文字を区別されるの で、MOREソフト管理画面で消せないファイルになってしまうことがあります。dash 上で直接ファイル名を指定すると削除することができます。 ・原因その2 ファイルに読み出しONLYのファイル属性がついている 普段 Zaurus 上ではわかりませんが、ファイルシステムには DOS 互換のファイル属 性がついています。ファイルに読み出しONLY属性(r)がついていると、パソコンデータ 画面でも消すことができません。ファイル属性は dash 上で ls -l すると確認するこ とができます。ファイル属性は dash の chmod コマンドで変更できるので、消せない ファイルを消去することが可能です。(chmod -r file でReadOnly解除) ・消せないファイルでトラブルが起こったら 一度ノートなどのカードが使えるパソコン上で、スキャンディスクを行い、ファイル システムの確認を行うことをお勧めします。dash で削除できるものの、アプリケー ションによってはその後の動作において、矛盾を含んだまま動作していることがあり ます。 ●キー入力時に知っておくと便利なこと タイプライターキーボードでは、[機能]キーとの組み合わせでさまざまな記号を入 力することができます。記号並びはパソコンのキーボードとほぼ同じです。 [機能]+[1] ! [機能]+[2] " [機能]+[3] # [機能]+[4] $ [機能]+[5] % [機能]+[6] & [機能]+[7] ' [機能]+[8] ( [機能]+[9] ) [機能]+[-] = [機能]+[:] * [機能]+[@] ` [機能]+[,] < [機能]+[.] > [機能]+[/] ? [ ] { } | ^ \ の記号はそのままでは入力できないので、[記号]入力ボードに切り 替えてから選択しなければなりません。 ・dash のみの拡張 [逆送り] 0x1e カーソル上(ヒストリ) [順送り] 0x1f カーソル下(ヒストリ) [決定] 0x0d CTRL+M CR 改行 [カード] 0x09 CTRL+I TAB(ファイル名補完) [送信] 0x1c カーソル右(ヒストリ) [受信] 0x1d カーソル左(ヒストリ) [中断] 0x03 CTRL+C ・コントロールキー 本体の [決定] ボタンをコントロールキーとみなします。[決定] に続けて押したア ルファベットキーをコントロールコードとみなして送信します。 例 [決定] [A] → CTRL-A ●外部コマンドについて R0602 からは、外部プロセスの起動が可能になりました。 コマンド名(アプリケーション識別子)を直接入力した場合、相当する MORE ソフト を起動します。パス名をつけることができます。フルパスで F0:????.APL のように 指定してもかまいません。拡張子を省略すると .APL とみなします。カードのソフト を起動するときは F1: をつけるかカレントディレクトリを F1: にします。大文字小 文字の区別に注意してください。 (例) MPFQ.APL (ACK) を起動するとき F0:> MPFQ (例) TSZB.APL (TEXT Editor) を起動するとき F0:> TSZB コマンド行の最後に & をつけるとバックグラウンド起動になります。バックグラ ウンド起動のとき、MORE ソフトは立ち上がってますが画面が切り替わりません。メ ニューから切り替える必要があります。 本体内蔵機能は、先頭に _ をつけた 4 文字の識別子で呼び出します。 _ADRS アドレス長 _FLER 情報ファイル _CALC 電卓 _CLCK 時計 _DICT 辞書 _PANT フォトメモリ _PINK インクワープロ _MAIL メール _NOTE レポート _SCDL スケジュール _ZNET パソコン通信 _ZWWW ブラウザ _OWNR 所有者情報 _SPSH 表計算 _JWRD ワープロ _LNCH インデックス画面 (例) 電卓を呼び出す場合 F0:> _CALC 注意: アプリケーション識別子には、大文字小文字の区別があります。 ●ファイルデバイス デバイスとファイル名のフォーマットをまとめます。cp コマンドでは F0: と F1: のみ使えます。他のデバイス名を使用する場合は dcp コマンドを使ってください。 F0: 本体フラッシュメモリ F1:[path] カードフラッシュメモリ COM0:[option] シリアルポート(15or16pin) IRCOM:[option] IrDA赤外線ポート(IrCOMMプロトコル) OPCM1: ASK赤外線ポート ハンドシェイクあり OPCM4: ASK赤外線ポート ハンドシェイクなし ●その他 Zaurus 版についての補足 画面の左上角にソフトキーボードのON/OFF切り替えスイッチが隠れています。普段 は見えませんがタッチすると現れます。このボタンは通常は使用しませんが、緊急用 に用意してあります。 注意: R2000 までは右上角にありました。R2001 で位置が変更されています。 ●コマンド行サンプル ちょっとプログラムっぽいなんとなくそれらしいコマンドの使用例をいくつか紹介 します。実際は、スクリプトファイルを書けばもっと複雑な処理もプログラム可能 です。(入力時は大文字小文字に注意) ・乱数値を 10個表示するだけ。 repeat 10 eval 'echo $/ $RANDOM' ・拡張子 .DOC のファイルだけを一度に操作するサンプル。 lfor name *.DOC : eval 'echo $name' 'ls -l $name' ●シェルスクリプトの作り方 テキストエディタで次のようなファイルを作ります。 MPFPTEST.DSH ------------------------------------------------------------------------------ set KEY=${GETKEY:s} if [ $KEY = "a" ];then echo "aが押された" else echo "ちがう" fi ------------------------------------------------------------------------------ プロンプトから「. MPFPTEST.DSH」と実行します。キー入力待ちになるので [a] を タッチするとメッセージが表示されます。別のキーでは「ちがう」と表示されます。 次に、先頭に1行追加してみます。 ------------------------------------------------------------------------------ echo "\c[[2Jおして" set KEY=${GETKEY:s} if [ $KEY = "a" ];then echo "aが押された" else echo "ちがう" fi ------------------------------------------------------------------------------ 今度は、画面がクリアされて「おして」と文字が出てからキー入力待ちになります。 \c[[2J というのは、ESC[2J のことです。これは ansi や vt100 等の一般的なエス ケープシーケンスで画面の消去に相当します。 今度はスクリーンコマンドを使ってみます。 ------------------------------------------------------------------------------ keypad 0 screen 4 20 53 echo "\c[[2Jおして" penwait echo "座標 $PENX $PENY が押された" penwait screen keypad 1 ------------------------------------------------------------------------------ キーパッドの表示を消して全画面表示にしてから、screen コマンドでスクロールエリ アの変更とフォントサイズを変えています。その後画面を消してペンタッチされた座 標を表示します。 よく使う命令は関数登録しておくと便利です。一度定義するとコマンドラインからも 拡張コマンドとして普通に使えます。 ------------------------------------------------------------------------------ function cls { echo -n "\c[[2J" } function location { echo -n "\c[[$2;$1H" } keypad 0 screen 6 10 40 cls location 2 1 echo "おして" penwait location 0 2 echo "座標 $PENX $PENY が押された" penwait screen keypad 1 ------------------------------------------------------------------------------ ● dash for Zaurus のターミナルエミュレーション Zaurus 版 dash は、ターミナルエミュレーション機能を持っています。現在サポー トしている制御コードは次の通りです。 ESC[2J 画面消去 ESC[y;xH カーソル位置指定 ESC[y;xf カーソル位置指定 ESC[nA カーソルup ESC[nB カーソルdown ESC[nC カーソルright ESC[nD カーソルleft ESC[5l カーソル表示ON ESC[5h カーソル表示OFF ESC* 画面消去 ESCD カーソル下移動 ESCE 改行 CTRL+J LF カーソルを次の行へ移動(スクロールあり) CTRL+M CR カーソルを行の先頭に移動 CTRL+H BS カーソルを1文字左に移動 CTRL+I TAB 次のタブストップへ移動 CTRL+L カーソル1文字右移動 CTRL+K カーソル1文字上移動 CTRL+] HOME カーソル位置を左上に移動 CTRL+[ ESC エスケープシーケンスの開始 『dash リファレンス』 説明中 dash のプロンプトは dash> で表記します。 ●行置換 行内に置かれた以下の文字は特殊な意味をもち、実行前に次のような置換が行われ ます。 ~ 環境変数 HOME の内容に置換します。 \ 後ろの特殊文字をそのまま出力します。 (例) \\ → \ \$ → $ \cN 特殊コードに置き替わります。 (例) \cA → CTRL+A \c[ → ESC \cM\cJ → CR LF (改行) "〜" スペース等を含む文字列を与えます。 '〜' 文字列の変換を一切行わない場合シングルクオートで囲みます。 `〜` 行置換中にプログラムを実行します。ただし、まだ表示出力は取り 込みできません。 ファイル名展開はありません。このシェルではパスの区切りは '/' でも '\' でも どちらでも構いませんが、上記のように '\' は特殊扱いされるため '\\' と2重に して記述する必要があります。これを忘れるとトラブルの元になりますので、できる だけ '/' で記述するようにして下さい。 注: dash の行置換のエスケープ実装は不完全です ●行の区切り ; cmd1 ; cmd2 の場合、両方を順番に実行します。ただし、行として は1つとみなすため行置換は一括して行われます。(あまり使うべき ではないかもしれない) & バックグラウンド実行の指定です。; 同様コマンドの区切りとして 働きますが、コマンドの終了を待たずに次の処理を行います。例え ば cmd1 & cmd2 の場合、2つのコマンドは同時に実行されます。 ウィンドウを開くアプリケーションの場合でも、UNIX+X-window の ように最後に & をつけないとプロンプトが戻ってこないので注意 してください。 ☆ Zaurus版 では & をつけなくてもプロンプトが戻ってきます。 & をつけた場合 MORE ソフトのバックグラウンド起動になります。 | パイプ指定です。& 同様コマンドの区切りでさらに並列実行を行い ます。この時、プロセスの標準出力を次のコマンドの標準入力とし て扱います。 ☆Zaurus版は外部コンソールコマンドの実行ができないので未実装。 # 以後行末まで無視します。コメント ●変数置換 $ で始まるシンボルは、環境変数の内容に置換されます。以下のようにさまざまな 文字操作を伴わせることができます。変数名の大文字小文字は区別します。 $var 環境変数 var の内容に置換。変数名の分離のため ${var} という指 定が可能です。 ${var#str} 変数 var の内容が str で始まる場合その部分を取り除いた文字列 になります。 ${var%str} 変数 var の内容が str で終わる場合その部分を取り除いた文字列 になります。 (例)set VAR=test.c の時 echo ${VAR%.c} とすると「test」になる ${var-str} 変数 var が定義されていればその内容、変数が定義されていなけれ ば str に置き替わります。 (例) ${home-$HOME} 変数homeが定義されていなければHOMEの内容 ${var+str} 変数 var が定義されていれば str、定義されていなければ NULL に 置き替わります。 ${var=str} 変数 var が定義されていればその内容、変数が定義されていない時 str の内容に置換し、さらに変数 var に str をセットします。 ${var:str} str の文字によって、変数 var の内容を変換します。 ? 文字数 u 大文字変換 l 小文字変換 / パスの区切りを'/'に変換 \ パスの区切りを'\'に変換 r パスの進路名部分 n パスのファイル名部分(拡張子含む) e パスの拡張子部分(1番最後のもの) f パスの拡張子(1番最後のもの)を除いた部分 p 変換内容を表示 q 無条件に内容を捨てる h 内容を数値として16進数8文字に置換 s 内容を文字コードとして文字に置換 d 内容の先頭文字のコードに置換 wn n番目のワード(再変換あり) cn n文字目以降 tn 先頭のn文字 (例) ${HOME:/l} パスの区切りを全部'/'にしてかつ小文字にする str の部分は再変換の対象となるため、さらに $var 等の指定ができます。({}の ネストはできない) ●シェルで参照する変数 DASHINIT 初期化コマンド。起動時にこの変数内の文字列を実行します。定義 されていなければ「. dashinit.rc」を実行します(つまり、カレン トディレクトリの dashinit.rc というファイルを実行する)。-f ス イッチをつけた場合は実行しません。 PS1 プロンプト文字列 (定義されていない場合は '%' ) 出力時に行置換 の対象となります。 (例) set 'PS1=${PWD:\\}\>' プロンプトにカレントディレクトリ内容を入れる、COMMAND.COM の 「PROMPT $P$G」相当 HOME cd コマンドで引数を指定しない場合、この変数で設定されたディ レクトリに移動します。 ●システム変数 読み出しのみ可能。ユーザーからの定義はできません。また、set コマンドで表示 する一覧にも含まれません。 ? 直前のコマンドの終了コード / repeat 実行時のカウント値 0〜9 引数並び (. や source コマンド実行時または function 定義され た関数実行時, $0 はコマンド名) < 1行入力待ちをし、入力した文字列に置き替わります。(この入力待 ちの間もヒストリやファイル名補完が可能) ☆R0605以降で対応しました。 * @ $0 を除く引数並び全部に置き替わります。どちらも "$1 .. " と処 理されることに注意して下さい。(本来なら、$@ は異なるべき)分割 するには eval が必要です。 PWD カレントディレクトリの内容です。 RANDOM 乱数値を持ちます。 GETKEY キー入力待ちをし、1文字キー入力を行います。押されたキーのコー ド(数値)になります。 ☆R0605以降で対応 GETKEY0 キーバッファの最初の1文字を参照します。入力がない場合は 0 に なります。 ☆Zaurus版では未対応 GETKEY1 リアルタイムキー入力をします。入力がない場合は 0 です。 ☆Zaurus版では未対応 PCODE プロセスコードを返します。 PENX ペン入力待ち後のX座標が入ります。☆Zaurus 専用 PENY ペン入力待ち後のX座標が入ります。☆Zaurus 専用 PENCX ペン入力待ち後のX座標をキャラクタ座標でとります。☆Zaurus専用 PENCY ペン入力待ち後のY座標をキャラクタ座標でとります。☆Zaurus専用 VERSION シェルのバージョン文字列が入ります。 SYSVER システムのバージョンを説明する文字列が入ります。(Win32のみ) ☆Zaurus版では未対応 HOSTNAME コンピュータ名が入ります。(Win32のみ) ☆Zaurus版では未対応 USERNAME Windowsのログインユーザー名が入ります。(Win32のみ) ☆Zaurus版では未対応 SYSTEMDIR Windowsのシステムディレクトリが入ります。(Win32のみ) ☆Zaurus版では未対応 WINDOWSDIR Windowsがインストールされているディレクトリが入ります。 (Win32のみ) ☆Zaurus版では未対応 <例> キーコードを調べる場合 dash> echo $GETKEY この後押したキーのコードが表示される。 ☆R0605以降で対応しました。 ●リダイレクト ☆リダイレクトはZaurus版では未実装です。動作は保証されません。 > file 標準出力の切り替え >> file 標準出力のfile追加切り替え >e file 標準エラー出力の切り替え >>e file 標準エラー出力のfile追加切り替え < file 標準入力の切り替え | command 標準出力を command の標準入力として実行(パイプ) 'e' で始まるファイル名をリダイレクトするときは、必ず '>' や '>>' とファイル 名を離して記述して下さい。 ●内部コマンド []内部は省略可能なことを意味します。.. とある部分は同一の引数を繰り返し指 定が可能です。コマンドの大文字小文字は明確に区別します。 and その時点での終了コードが 0 の時 cmd を実行し、0 でなければ終 了コード 1 を返します。or コマンドとともに、if 文の条件式結合 に使用できます。 (例) if [ $A = NO ];and [ $B = NO ]; then .. また、単体でも簡単な if 構文を構築できます。 (例) [ $A = NO ];and ls これは「 if [ $A = NO ];then ls ; fi 」に相当します。つまり、 perl でいう「&&」のことです。 cat .. 極々簡単なファイルの表示コマンドです。ワイルドカード展開しま す。 注: 行単位で処理している関係上、行があまりに長いファイルの場 合は表示の時行が途中で切られている場合があります。 cd [] カレントディレクトリを変更します。 ディレクトリ名を省略すると環境変数 HOME のディレクトリに移動 します。もし ksh のような OLDPWD を使いたいなら function cd { set "OLDPWD=$PWD" =cd ${1-~} } と再定義すればいいでしょう。 chmod [-R] {+-} .. .. ファイルのモードを変換します。+ でモード追加、- で削除です。 ワイルドカード展開が可能で、-R をつけるとディレクトリ以下も 再帰的に全ファイルの変換をします。 ☆Zaurus版ではディレクトリ検索ができないので -R は使えません。 ZaurusOS で使えるmode指定 r 読み出し属性 h 不可視属性 s システム属性 (例) chmod +hr file cp cp .. ファイルを複製します。ディレクトリ名に対してコピーする場合に のみ複数ファイル名が指定できます。ワイルドカード展開します。 ☆Zaurusではコピー先にディレクトリ名を使う場合、パスの最後が ':' か '/' で終わっている必要があります。 ctrlkey .. 行入力中のコントロールキーの機能をそれぞれ設定します。code は 割り付けるコントロールキーの 1〜31 (CTRL+A〜CTRL+_) のコード を直接与えます。fnc は数値で、以下の通り。 fnc 名前 意味 0 NOP 何もしません 1 ENTER リターンキーです 2 ERASE 1文字消去します BS のこと 3 FCOMP ファイル名補完します 4 GENV 環境変数 _ の内容取り込み 17 HISTP ヒストリをさかのぼります 18 HISTN ヒストリを戻ります 32 RDRAW バッファ内を再描画します 64 KILL バッファを全部消去します 128 EXEC 直接プログラムを呼び出します KILL, EXEC, RDRAW は、他の機能に対して値を加算して、複数の機 能を持たせることができます。(例 KILL+GENV=68) (例) CTRL+B をリターンキーと同じ働きにする ctrlkey 2 1 (例) ESC でファイル名補完できるようにする ctrlkey 27 3 (例) ヒストリ移動を CTRL+E と CTRL+X (ED.Xバインド)にする ctrlkey 5 17 24 18 EXEC を指定した場合、c数値 というコマンドを直接実行しようと します。例えば ctrlkey 12 160 (160=EXEC+RDRAW)と実行すると、 CTRL+L を押した時に c12 というコマンドを直接実行します。これ を利用して、 function c12 'echo -n "\c[[2J"' のようにでも定義しておけば、CTRL+L を押すとすぐ画面を全消去 するようになります。なお、この時入力中のバッファの文字列は保 存されます。もし、CTRL+L の時に入力バッファの内容もクリアし たければ、ctrlkey 12 224 (EXEC+RDRAW+KILL)としておけばいいで しょう。 もちろん、よく使うコマンドを直接起動するためにこの EXEC 機能 を使うことができます。例えば、 ctrlkey 1 224 function c1 'ls -l' のように定義すれば、いつでも CTRL+A を押せば ls -l を実行す ることになります。同様に、 ctrlkey 11 160 function c11 'ls -a' というのもいろいろ使い道があるかもしれません。これは行入力の 途中であっても、CTRL+K を押すだけでそのディレクトリの内容を 見ることができます。 さらに、EXEC で呼び出した c数値 というプログラムには、その時 の行バッファの文字列が引数として与えられるため、 ctrlkey 5 160 function c5 'notepad $@ &' のように定義すれば、最初にファイル名を書いて、その後 CTRL+E を押すだけでいきなりエディタが起動します。 ctrlkey 1 160 function c1 'eval "ls -l $@"' というのも非常に興味深い設定です。これは行入力途中のファイル 名の、タイムスタンプやファイルサイズ等を、行入力途中で参照で きるというものです。 などなど、他にも ksh のように環境変数 _ を設定してみたり、関 数定義によって行内の編集コマンドを拡張するなど、いくらでも応 用がきくでしょう。 (例) CTRL+A で行バッファ内の文字を先頭から1文字ずつ消す ctrlkey 1 196 function c1 'set "_=${@:c1}"' (例) CTRL+A で行バッファ内のアルファベットを大文字にする ctrlkey 1 196 function c1 'set "_=${@:u}"' ☆Zaurusでは一部のコントロールコードの入力ができません。 dcp ファイルコピーを行います。指定するファイル名はシェルの変換が 一切入りません。そのためパスを厳密に指定し、さらにディレクト リ区切りも「\」を使う必要があります。その代わりデバイスファ イル名を使用することが可能です。 ☆Zaurusのみ、動作確認はしていない df [] 各ドライブのディスク容量を表示します。ドライブ名を与えるとそ のドライブについてだけ表示します。 (実行例) Filesystem kbytes used avail capacity Mounted on A:/removable C:/fixed 2056256 1686144 370112 82% C:/ ( 64/512) D:/fixed 830336 482256 348080 58% D:/ ( 32/512) E:/fixed 830336 490352 339984 59% E:/ ( 32/512) F:/fixed 838400 837744 656 99% F:/ ( 32/512) O:/removable 122622 96582 26040 78% O:/ ( 4/512) R:/cd-rom 572928 572928 0 100% R:/ ( 16/2048) S:/cd-rom 左から、ドライブ名と種類、全容量、使用容量、残り容量、割合、 進路名への割りあてとなります。(圧縮ドライブの場合は正しい値に ならないことがあります) ☆Zaurus版は R1223 から全体容量もきちんと表示されるようにな りました。 drv FDD のドライブ制御をします。X680x0 Human68k のみのコマンド。 du [-s] [] .. そのディレクトリの消費しているディスク容量を求めます。表示単 位は Kbyte です。サブディレクトリ以下をたどって、ファイルサイ ズの合計をディレクトリ毎に報告します。ただし、ディレクトリ自 身はブロックサイズの合計に含まれないことに注意して下さい。 -s スイッチをつけた場合は、途中のディレクトリでのサイズ表示を 行わず、常に合計のみ表示します。 dump .. ファイルの内容を 16進数表示します。more コマンドと同じように 1画面単位で停止し、キー入力待ちになります。 ☆このコマンドは Zaurus 専用です。 echo [-n] [] .. 文字列表示です。-n スイッチをつけた場合は最後に改行をつけま せん。各要素は単一のスペースで区切ります。 eval .. cmd を再評価したのち実行します。いちばん最後に実行したコマン ドの終了コードを返します。C言語の「,」のようなもの。 exit [] 自分自身のシェルの終了。終了コードを省略した場合は 0 です。 set コマンドでオプションフラグの 2 が設定されている場合は、こ のコマンドの実行は失敗します。 ☆R0605以降で対応しました。 exec .. cmd を常に外部コマンドとして実行します。UNIX シェルの exec と は異なり、cmd の実行が終わると元の場所に戻ってきて続きを実行 します。 export .. 環境変数登録。set と export は全く同じ命令です。一度に複数指 定できます。引数のクオートは、変数名を一緒に行うことに注意し て下さい。=の両端にスペースを含んではいけません。 (例) set TEMP=d:/home 'PS1=$PWD\>' export 設定されている環境変数一覧を表示します。 export 内部のフラグレジスタを設定できます。現在有効なものは次の通り です。デフォルトは 32 です。 bit1( 2) exit コマンド等シェルの終了を禁止します bit2( 4) 外部コマンド実行時の実行行をエコーバックします bit5(32) 内部コマンド実行時の実行内容を報告します (例) set 36 すべてのエコーをON set 0 コマンド行エコーをすべてOFF function function { .. } 関数定義です。内部コマンドを登録します。定義したコマンドの扱 いは source 実行時とほぼ同じで、引数も $@ や $1〜9 等を展開し ます。異なるのはメモリ上に置かれることだけです。実行は制御文 を除いた内部コマンドに常に優先され、このシェルにおける alias 代わりにも働きます。ブロック指定の「{」「}」は必ず独立行にな ければなりません。1行で指定できる簡単な関数は、ブロックを指 定しないで名前の直後にコマンド行を書くことができます。この場 合必ず「'」でクォートが必要。 例えば、function 自身で csh の alias のようなコマンドを作るに は、次のようにします。( { と } はネストできません ) function alias { shift if [ "$1" ];then function $0 "$@ \$@" fi } 以後「alias rd rmdir」のように定義できるようになります。 function 定義されている関数の定義内容一覧を表示します。 if ; then ; [elif ; then ;..] [else ;] fi cmd1 の終了コードが 0 の場合、then 以後の cmd2 を実行、0 以外 の場合、else 以後の cmd を実行します。もし elif があるなら、 else ではなく再びそこで終了コード評価します。実行されない部分 も行の評価は行われるので、副作用を持つ行置換には注意。 cmd1 (cmd4) 部分は、たいてい test コマンド([)が用いられます。 (例) if [ "$VAR" = "SET" ];then .. fi この例では、test コマンドによって変数 VAR の内容と SET とい う文字列を比較し、その結果が成り立てばブロック内を実行します。 test コマンド '[' の前後には、必ずスペースが必要です。同様に ']' の前にもスペースが必要です。if ブロックは多段階にネスト できます。 keypad ソフトキーボードのON/OFFを制御します。 switch 0 キーボードOFF 1 キーボードON ☆Zaurus専用 lfor [-R] .. : eval 変数 name に随時 str を代入しながら cmd を実行します。str の ワイルドカード文字列はファイル名に展開します。-R を付けると、 ディレクトリ以下、再帰的に展開します。つまり for というより、 ほとんど find . -exec になります。lfor のネスティングはできま せん。(lwhile, repeat では可能) (例) lfor name *.c : eval 'echo $name' ☆Zaurusでのディレクトリ対応は機種に依存します ls [-la] [] .. 簡単な ls コマンドです。ディレクトリ内容をリストします。ファ イル名を指定すると指定ファイルだけ表示します。ファイル名のソー トは行いません。ワイルドカードが使えます。-l スイッチをつけた 場合、他の情報も一緒に表示します(ファイルアトリビュート、ファ イルサイズ、タイムスタンプ)。-a スイッチをつけると . で始まる ファイル、不可視属性やシステムファイル、ボリュームラベルも表 示するようになります。-l と -a を同時に指定する時は、-la のよ うにくっつけて下さい。(-alでも可) (実行例) ls *.c microshell.c print.c line.c exec.c inner.c cmd.c env.c ai_fio.c string.c if.c expr.c stest.c alias.c rm.c history.c ps.c more.c cp.c df.c ls.c (実行例) ls -l *.doc a----- 23658 1993-08-05 0:53:08 dash.doc a----- 5260 1993-08-01 22:47:42 aish.doc a----- 3035 1993-06-15 10:51:30 koishenc.doc (例) 最初にそのドライブの容量も表示する場合 df $PWD;ls -l (例) ディレクトリ以下もファイル全部表示する場合 lfor -R name * : eval 'ls -l $name' -F オプションはありませんが、ディレクトリの場合はファイル名 の後ろに常に '/' を付けます。 ディレクトリ名を与えてもそのディレクトリ以下のファイル名は表 示しません。ディレクトリ名もファイルの1つとして情報を表示し ます。(ディレクトリ内のファイル表示をする場合は /* をつける) lwhile cmd の終了コードが 0 の間、cmd を繰り返し実行します。cmd は1 コマンドだけなので eval と組み合わせて簡単な while 文が作れ るでしょう。 (例) lwhile eval 'echo $1' shift mkdir .. ディレクトリを作成します。一度に複数指定可能です。 ☆Zaurus では一部の機種のみ対応 more .. ファイルの内容を表示します。この時、ページ単位で停止し、キー 入力待ちを行います。ファイル名を省略すると、標準入力から読み 込みます。 このコマンドは、フィルタとして使われる用途が多いことから、シェ ル組み込みではなく外部コマンドになっています。DOS の more コ マンドが .com であり、dash のパス検索に引っかからない対策用 でもあります。機能は最小限なので、もし、他の more.exe を使用 しているならそちらでもかまいません。 ☆ZaurusではR0605から対応。フィルタとしては使用できません 停止時のキー操作 [SPACE] 次のページ [ENTER] 1行送り [ESC]/[Q] 停止 mv mv .. ファイルの移動、または名前変更を行います。相手先がディレクト リの時だけ複数ファイル指定が可能です。ワイルドカード展開しま す。同一のドライブ内でのみ可能です。 ☆Zaurusではリネームとしてのみ機能します。ファイルの移動は できません。 or その時点での終了コードが 0 でないとき cmd を実行し、0 ならば 終了コード 0 を返します。and コマンド同様、if 文の条件式結合 に使用できます。 (例) if [ $A = NO ];or [ $A = no ]; then .. また、単体でも簡単な if 構文を構築できます。 (例) [ $A = NO ];or ls これは「 if [ $A != NO ];then ls ; fi 」に相当します。つまり、 perl でいう「||」のことです。 penwait ペンタッチの入力待ちをします。入力結果は変数 $PENX $PENY $PENCX $PENCY で得る事ができます。 ☆Zaurus 専用 ps プロセス一覧を表示します。(X68000 版のみ) repeat ごく簡単なループ実行を行います。cmd が count 回だけ実行され ます。複数命令は記述できないので、その場合は eval 等を使用し て下さい。eval 時のみカウンタを $/ で参照可能です。 (例) repeat 10 eval 'echo $/' rm [-r] .. ファイルを削除します。ワイルドカード指定が可能です。-r をつ けるとディレクトリ以下再帰的に削除します。 ☆Zaurusではディレクトリ以下の再起削除はできません。 rmdir .. ディレクトリを削除します。一度に複数指定可能。ワイルドカード 指定が可能です。 ☆Zaurusでは一部の機種のみ対応 screen [ [ ]] コンソール画面の領域とフォントサイズを変更します。この命令は 特に画面クリアは行いません。パラメータをすべて省略するとデフォ ルトのモードに戻し、画面内を消去します。 font 3 4x10dot フォント QP40(デフォルト) 4 6x12dot フォント QP48(12dot) 6 8x16dot フォント QP64(16dot) 9 12x24dot フォント QP96(24dot) row 行数(最大24) columns 1行の文字数(最大80) offsetx コンソール領域表示開始位置(QP指定=dot×4) offsety コンソール領域表示開始位置(QP指定=dot×4) (例) screen 3 15 80 標準設定 screen 4 12 53 12dot screen 6 9 40 16dot screen 9 6 26 24dot ☆Zaurus専用 set [] .. export と同じです。 shift 引数並びのパラメータを1つずらします。$0 も変化します。 source [..] テキストファイルの内容を、そのシェルで実行します。ファイル名 のあとに、引数並びを書くことができます。サブシェル呼び出しで はありません。source 中にファイル内でさらに source を実行し て別のファイルを呼び出すことができます。COMMAND.COM の .BAT とは違い、終了すると呼び出し元に復帰します。. と source は同 一です。 sleep