home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
oh_fm
/
ysh86
/
ysh.txt
< prev
next >
Wrap
Text File
|
1980-01-02
|
116KB
|
2,151 lines
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃
┃ ┃ YSH86簡易りふぁれんすまにゅある ┃ ┃
┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
プログラム名:YSH86
YSH.EXE,RUNYSH.COM,LOGIN,LOGOUT,YSHRC_,ERR.MSG
SCREEN.EXP,GCLS.COM
対応機種 :FMR-50/60/70,FM TOWNS(MS-DOS)
作者 :WHITE RAM
━━━━━━━━━━━━━━━━━ 口上 ━━━━━━━━━━━━━━━━━━
YSH86は効率的なコマンドの入力・実行を処理する拡張シェルです。コマンドラ
インを解釈してコマンドを起動する「コマンドインタプリタ」,コマンドライン入力
の手間を軽減するための「マクロプロセッサ」,バッチファイルプログラミングのた
めの「言語インタプリタ」の,シェルの3大機能のどの点においてもCOMMAND.C
OMを上回る機能をもっており,コンソール画面で作業を行う方には強い味方となりま
す。 このプログラムはOh!FM'90年8月号~11月号に掲載されたもので, 作者WH
ITE RAM氏・補助ツ-ル(SCREEN.EXP,GCLS.COM)作者の佐藤進一氏およびOh!
FM編集部のご好意により収録しました。以下に簡単な使い方をまとめておきますが
詳しくはOh!FM'90年8月号~11月号を参照ください。
━━━━━━━━━━━━━━━━ 機能概要 ━━━━━━━━━━━━━━━━
YSH86の機能は大別して以下の3つの機能に分類されます。
マクロプロセッサ機能
コマンドインタプリタ機能
言語インタプリタ機能
これらの各々の機能と,そのほかの代表的な機能について,以下に簡単にまとめてお
きます。
●マクロプロセッサ機能1 ヒストリ置き換え
入力したコマンドのヒストリ(履歴)を記録し,その過去のヒストリを整形してコ
マンドラインを作成する機能です。[前行][次行]キーを使ってコマンドライン上にワ
ンタッチで呼び出して,スクリーンエディットすることができます。また,コマンド
入力によりヒストリを呼び出し,必要部分を切り出したりすることもできます。エデ
ィット・コンパイル・実行などの単純な作業の繰り返しには非常に便利です。
●マクロプロセッサ機能2 1行マクロコマンド機能
一種のコマンドの別名定義機能(いわゆるエリアス機能)で,これによりXCOP
Y.EXEをCOPYとかCPYという名前で起動したりできます。また,YSH86では
1行のコマンドラインで複数のコマンドを実行できるので,1行マクロコマンドをバ
ッチファイルのような感じで使うこともできます(引数の受け渡しもできます)。通
常のバッチファイルを使用するよりもプログラムを高速起動できますので,簡単なバ
ッチファイルなら,同じ内容の1行マクロコマンドを定義したほうが作業効率があが
ります。
●マクロプロセッサ機能3 シェル変数の展開
よく使う定数やパス名などのパラメータを,ユーザがシェル変数としてが自由に定
義できます。定義されたシェル変数は,コマンドライン上でコマンド実行前に展開さ
れますので,パラメータの短縮入力やバッチファイルの可読性向上に活用できます。
また,一部の変数名はYSH86によって予約されており,YSH86の各種の動作を制
御するために使用されます。
●マクロプロセッサ機能4 コマンド出力結果による置き換え
あるコマンドが標準出力へ出力した内容によって,コマンドラインの指定部分を置
き換える機能です。これにより,コマンドの組み合わせがより柔軟性に行えるように
なります。とくにUNIX流のコマンド入力を行う際には欠かせません。
●マクロプロセッサ機能5 ファイル名の展開
いわゆるワイルドカード機能です。MS-DOSのワイルドカードよりかなり強力で,
「*」「?」以外にも数種のワイルドカードがフォローされており,UNIXで使わ
れているワイルドカード並みの機能をもちます。
●コマンドインタプリタ機能1 コマンドサーチパスの拡張
カレントディレクトリとMS-DOSの環境変数PATHに設定されたパスのほか,YS
H86のシェル予約配列変数pathに設定された各要素をコマンドサーチパスとして検索
します。これにより,常時参照するパスは環境変数PATHに設定しておき,ある処理
を行う間だけ参照したいパスはシェル予約配列変数pathを書き換えて対処する,とい
ったことが可能になります。
●コマンドインタプリタ機能2 リダイレクト機能の拡張
標準入力・標準出力に加えて,標準エラー出力を利用できるようしました。また,
標準出力および標準エラー出力では,オーバライト指定したときのファイル保護機能
を付加しています。加えて,シェルからコマンド内へパラメータ入力する機能(いわ
ゆるHERE DOCUMENT機能)もフォローしています。これらにより,リダイレクト
を使ってのコマンドの組み合わせがより柔軟に行えます。
●コマンドインタプリタ機能3 コマンドセパレータの拡張
パイプセパレータ「|」以外に,コマンド順次実行セパレータ「;」,AND実行
セパレータ「&&」およびOR実行セパレータ「||」を導入しました。これにより,1
行のコマンドラインで複数のコマンドを種々の条件により実行することが可能となり
ました。
●言語インタプリタ機能1 各種制御コマンドの装備
FOREACH・WHILE・REPEAT・IF・SWITCH・EXIT・CONTINUE・BREAK・SHIFTなどの各種
制御コマンドを,YSH86の内部コマンドとして装備しました。これらの制御コマン
ドは,バッチファイルの中ではいうまでもなく,コマンドライン上で対話的にも使用
可能です。
●言語インタプリタ機能2 バッチファイルの引数の増加
COMMAND.COMと同様にバッチファイルに任意の引数を与えて起動することができ
ますが,YSH86ではSHIFTコマンドを使用しなくても10個以上のパラメータを処
理できます(最大255個)。 簡単なバッチファイルでは関係ありませんが,いざとい
うときに不便しないですみます。
●その他の機能1 コマンド入力のスクリーンエディット機能
コマンド入力の際にスクリーンエディットできるようにしました。コマンドヒスト
リのワンタッチキーによる呼び出し機能との組み合わせは,コマンドラインの入力の
負担を著しく軽減します。
●その他の機能2 複数行コマンド入力のサポート
行末にエスケープ記号を置くことにより,1つのコマンドラインを複数行にわたっ
て記述することができます。これにより,引数が複雑だったり,様々なコマンドを絡
んだりするコマンドラインでも,わかりやすいように改行して入力できます。なお,
最終的には,エスケープ記号+改行記号は1個のスペースに置換されてMS-DOSに引
き渡されます。
●その他の機能3 EXPファイルの自動起動機能を内蔵
TOWNSで.EXPファイルを実行する際,.EXEファイルや.COMファイルと同じように
コマンド名だけで起動できるようにしました。つまり与えられたコマンドが,拡張子
として.EXPをもつファイルだった場合,YSH86はRUN386.EXEを自動的に起動し,与
えられたコマンドをその引数として付加します。単にRUN386とタイプする手間を
省いただけですが,操作感覚は格段に向上し,.EXPファイルの開発・実行が楽になり
ます。
━━━━━━━━━━━━━━━ 起動・終了 ━━━━━━━━━━━━━━━━
YSH86の概要紹介はこのくらいにして,使い方の解説に入りましょう。まずは,
基本的な起動と終了に関することから。
●動作環境
YSH86は,TOWNSおよびR-50/60/70シリーズ用の拡張シェルです。
MS-DOS V3.1以上で動作しますが,TOWNSでEXPファイルを起動するには,
TOWNS用MS-DOSにRUN386やTBIOSを組み込む(Oh!FM90年4月号p.40,p.48参
照)か,386|ASM TOOL KIT付属の「開発環境」を使うか,TownsMENUからコ
ンソールエミュレータのORICON V1.03を起動する必要があります(古いコンソール
エミュレータだと,YSH86が使用しているMS-DOSのエスケープシーケンスをサポ
ートしていないことがあり,キー入力がおかしくなることがあります)。
YSH86の動作に必要なメモリは128Kバイト弱ですから,TOWNSおよびR-50/60
/70 シリーズで標準の1Mバイト(うちMS-DOS用空間が768Kバイト)あれば余裕で
動作します。また,通常利用する程度なら,環境変数PATHやBUFFERの設定や,常駐
コマンドの配置も,メモリ的にはとくに気にする必要はありません。ただ,環境変数
や常駐コマンドでメモリを取りすぎると, COMMAND.COMと同様に巨大なアプリケーシ
ョンを起動できなくなくこともありますので注意してください。
YSH86の作業画面は,80字×25行のコンソール画面を使います(TOWNSでは
グラフィックモード1)。それ以外の画面モードでは,コマンド入力のスクリーンエ
ディット機能が使えなかったり,画面表示が崩れたりします。もちろん,これはコマ
ンドライン入力作業時だけに関わる話で,アプリケーションソフトが任意の画面モー
ドで動作することを妨げるものではありません。
たとえば,TOWNSのグラフィックモード10とか12とかで動作する.EXPファイル
をYSH86から起動することは可能です。その際,アプリケーション動作画面モード
への切り換えは,.EXPファイル自身かそれを呼び出すバッチファイルで行ってくださ
い。終了後のMS-DOSコンソール画面への復帰は,YSH86側が自動的に行います(後述
する補助コマンドのSCREEN.EXPとGCLS.COMを自動的に起動して処理します)。
●必要ファイル
YSH86を構成するファイルは以下のとおりです。
1) YSH.EXE
YSH86プログラム本体
2) RUNYSH.COM
YSH86起動プログラム
3) YSHRC_
YSH86起動時に実行される初期設定バッチファイル(オプション)(YSH86
では,拡張子.BATが付かないテキストファイルもバッチファイルとして扱えます)
4) LOGIN
COMMAND.COMからYSH86を起動したとき(YSH86にログインしたとき)に実行さ
れるバッチファイル(オプション)
5) LOGOUT
YSH86を終了し, COMMAND.COMに戻るとき(YSH86をログアウトするとき)
に実行されるシェルファイル(オプション)
6) ERROR.MSG
YSH86のエラーメッセージファイル
7) SCREEN.EXP
TOWNSで.EXPファイルを実行して終了したあと, スクリーンモードをMS-DOSコ
ンソール用に戻すための,スクリーンモード設定プログラム(89年9月号掲載(米
村英明氏作)のアッパーコンパチで, パラメータを省略して起動するとMS-DOS
コンソール画面に切り換えてくれるものです。佐藤進一氏に作成していただきま
した)
8) GCLS.COM
TOWNSで.EXPファイルを実行して終了したあと, VRAMの初期化を行うためのイニ
シャライズプログラム('89年9月 号掲載(米村英明氏作)とほぼ同機能のもの
で,YSH.EXEからの呼び出しを考慮した形に改良されています。佐藤進一氏に
作成していただきました)
TOWNSでは1)~8)までの全部を,R-50/60/70では,1)~6)を作業ディスクにコ
ピーしてください。ディレクトリ構成は後述する例を参照してください(めんどうで
あればすべてルートディレクトリに置いてください)。
なお,日本語フロントエンドプロセッサや追加デバイスドライバなどのシステムフ
ァイルや,MS-DOSの標準内部コマンド(ようはCOMMAND.COM),MS-DOSの標準
外部コマンド,各種ユーティリティコマンド,スクリーンエディタ,言語処理系など
を,適宜用意しておいてください。そのほか.TOWNSで.EXPファイルを実行する
には,RUN386.EXEが必要です。また,TBIOS.BINやTBIOS.SYS,MSCDEX
.EXEもディスクに入れておいたほうがよいでしょう。
●ディレクトリ構成
YSH86を構成するファイルの配置条件は以下のとおりです。
YSH.EXE
直接起動する際は,MS-DOSの環境変数PATHが示すディレクトリ上において
ください。RUNYSH.COMを使って起動する場合には,後述する退避・復帰に
都合上,RUNYSH.COM起動時のカレントディレクトリにYSH.EXEをおいてくだ
さい。
RUNYSH.COM
MS-DOSの環境変数PATHが示すディレククトリ上においてください。
YSHRC_・LOGIN・LOGOUT
いずれも, YSH.EXEまたはRUNYSH.COM起動時のカレントディレクトリ
上においてください。なお,掲載したこの3つのリストはサンプルですので,
適宜書き換えて利用してください(なお,存在しない場合は,バッチファイル
による自動設定が行われないだけで,YSH.EXE自体は起動します)。
ERROR.MSG
通常はドライブA:に作った\SYSというディレクトリに入れておきます。ほか
のドライブやディレクトリに置きたい場合は,YSHRC_に,
set errmsg=<ドライブ名:\ディレクトリ名>
という定義を追加しておきます。
SCREEN.EXP
RUN386.EXEから復 帰するときの内部処理の都合上,カレントディレクト
リにおいてください(FMRでは不要です)。
GCLS.COM
環境変数PATHの示すディレククトリ上においてください(FMRでは不要で
す)。
AUTOEXEC.BATでYSH86を起動する場合は 単純に,AUTOEXEC.BATの最後の行に「RU
NYSH」を追加してください。もちろん,COMMAND.COMのコマンド入力レベルからRU
NYSH.COM もしくはYSH.EXEを起動してもいっこうにかまいません。
●起動
YSH86の起動方法は, RUNYSH.COMを使う方法と,直接YSH.EXEを起動する
方法があります。 この2つは,大きなアプリケーションを実行するときに,YSH.EXE
が退避・復帰できるかどうかが違います。 通例は退避・復帰ができるRUNYSH.COM
を使う方法をとりますが,実行する外部コマンドが小さいものばかりのときはYSH
.EXEを直接起動してもかまわないでしょう。
また,YSH.EXEを直接起動する場合は,実行コマンドをパラメータで指定して,
YSH.EXEが立ち上がると同時にそのコマンド実行させ,コマンド実行終了と同時に
YSH.EXEを終了させることができます。そうした使い方をしたい場合は直接起動す
ることになります。
書式は以下のとおりです。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃RUNYSH [<OPTION LIST>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃YSH [<OPTION LIST>] [<COMMAND>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<OPTION LIST>は起動時に指定できるオプションです(表1参照)。 RUNYSH.COM
の<OPTION LIST>と,YSH.EXEの<OPTION LIST>と全く同一です(事実RUNYSH.COM
は単純に与えられた<OPTION LIST>をYSH.EXEに引き継ぐだけです)。省略してもか
まいませんが,<COMMAND>の後ろに指定してはいけません。
<COMMAND>は,即実行させたいコマンドの名前とそのパラメータです。指定コマンド実行後,YSH.EXEは終了します。
どちらの場合でも起動時に以下のような処理が行われます。
起動すると,YSH.EXEはまず最初にYSHRC_に記述してあるコマンド群を実行し
ます(カレントディレクトリにYSHRC_が存在する場合)。
次に,このYSH.EXEがCOMMAND.COMから起動された場合は,バッチファイルL
OGINに記述してあるコマンド群を実行します(カレントディレクトリにLOGINが存在
する場合)。YSH.EXEの子プロセスとしてYSH.EXEが呼び出された場合はLOGINは実行さ
れませんが,YSHRC_はオプションにより実行することもしないこともできます。
YSH86起動オプション
┌────────┬───────────────────────────┐
│ オプション │ │
│ │ │
│ -P │プロンプト・タイムを出力しない │
│ │ │
│ -X │ユーザプログラム異常終了時シェルをアボートする │
│ │ │
│ -F │YSHRC_を実行しない │
│ │ │
│ -N │コマンドラインの展開を行うが実行しない │
│ │ │
│ -E │展開したコマンドラインをエコーする(シェル予約変数ec│
│ │hoをセット) │
│ │ │
│ -V │展開する前のコマンドラインをエコーする(シェル予約変数│
│ │verboseをセット) │
│ │ │
│ -C │バッチファイル実行時,コマンドラインを展開するが実行し│
│ │ない │
│ │ │
│ -H │ホームパス(シェル予約変数home)および実行パス(シ│
│ │ェル変数path)を設定しない │
│ │ │
│ -M │エラー番号で表示する,メッセージでは表示しない │
│ │ │
│ -S〈n〉 │〈n〉でコマンドラインの入力モードを指定 │
│ │(2=スクリーンエディットモード;OTHER=スタンダ│
│ │ードエディットモード) │
│ │ │
│-I〈path〉│起動実行するYSHRC_のパスを指定する │
│ │ │
│/C〈path〉 │〈path〉で指定されたコマンドを実行し,実行後シェル│
│ │を終了する │
└────────┴───────────────────────────┘
●実行
起動後は,コマンドラインから入力された指示を実行します。マクロプロセッサ機能を使ったマクロ表記を展開したあと,各コマンドを実行します。
制御コマンドなどのYSH86内部コマンドはYSH.EXE内で処理します。
MS-DOS標準内部コマンドは,COMMAND.COMを呼び出して実行させます(YSHRC_
中の定義を書き換えることによって,同等の機能の外部コマンドを代わりに実行する
こともできます)。
MS-DOS外部コマンドは,「.COMファイル」「.EXEファイル」「.EXPファイル」「
.BATなしバッチファイル」「.BAT付きバッチファイル」のいずれかです(.EXPファイ
ルはTOWNSでのみ実行できます)。実行の優先順位は上記のとおりです。
外部コマンド実行時には,通常はYSH86を起動した残りのメモリを使いますが,
メモリ不足で外部コマンドを起動できない場合,およびYSH86の内部コマンドであ
るEXECコマンドで外部コマンドを-Sオプション付きで起動した場合には,YSH86
の環境(シェル変数,一行マクロ,ヒストリ,ディレクトリスタック)およびMS-D
OSの環境変数を保存した上で,YSH.EXEの占有しているメモリを開放し,そのコマ
ンドを実行します。
実行終了後,RUNYSH.COMを使っている場合は,YSH.EXEはによって再起動され,
環境も実行前の状態を回復します。YSH.EXEを直接起動した場合は,環境を回復し
てYSH.EXEを再起動することはできず,COMMAND.COMに戻ります。
RUNYSH.COMを使用することによるオーバヘッドは1Kバイトのみです。したがって,
YSH.EXEを開放した状態では,COMMAND.COM上で実行できるコマンドはほとんど実
行できます。
TOWNSにおいて,実行しようとするコマンドの拡張子が.EXPである場合には,Y
SH86は自動的にRUN386.EXEを起動し,与えられたコマンドをそのまま,そのパラメ
ータとして与えます。したがって,ユーザはコマンド「RUN386」を明示的に与える必
要はありません。
RUN386.EXE自体のオプションはシェル予約配列変数r386optionに定義します。
YSH86は,シェル配列変数r386optionの各要素をスペースで接続し,RUN386.EXE自
体のオプションを形成します。r386optionのディフォルト値は未定義です。つまりデ
ィフォルトでは,RUN386.EXEに対してオプションは付加されな いことになります。
.EXPコマンドの終了時,TOWNSのスクリーンモードを初期化するために,SCREEN
.EXPとGCLS.COMコマンドがYSH86によって自動的に実行されます。
●終了
YSH86を終了するためには,LOGOUTもしくはEXITコマンドを発行します。あるいは,
EOFキー([CTRL]+[Z])を押下することによっても終了することができます。
LOGOUTコマンドによってYSH86を終了し,COMMAND.COMに戻る場合は,LOGOUT
ファイルに記述してあるコマンド群を実行したあとYSH86を終了します(カレントディ
レクトにファイル LOGOUTが存在して いる場合。なお,子プロセスとして起動された
YSH.EXEから親プロセスのYSH.EXEに戻る場合はLOGOUTファイルは実行されませ
ん)。
EXITコマンドもしくはEOF入力 ([CTRL]+[Z])による終了の場合には,バッチフ
ァイルLOGOUTに記述してあるコマンドは実行しません。
━━━━━━━━━━━ コマンド入力エディット機能 ━━━━━━━━━━━━━
それでは,コマンド入力時のエディット機能について説明しましょう。
YSH86のコマンド入力には2つのモードがあります。
●スタンダードエディットモード
1つはスタンダードエディットモードです。
YSH.EXEをオプション指定なしで直接起動し,しかも初期化バッチファイルのY
SHRC_・LOGINのどちらも使用しない状態では,スタンダードエディットモード
モードとなります(つまりデフォルトではスタンダードエディットモードになってい
ます)。また,シェル予約変数editmodeを0に設定するとこのモードになります。
スタンダードエディットモードでは,COMMAND.COMの行編集機能とまったく同じ
状態になります。エディットカーソルの移動キーは[ ]キーのみで,[PF1]~[PF5]キ
ーによるテンプレート機能が使えます。ただ,エスケープ記号(デフォルトでは@)
を行末に置くことにより,複数行入力を行うことができますし,またヒストリ機能も
コマンド指定なら利用できますので,COMMAND.COMよりも便利でしょう。
●スクリーンエディットモード
もう1つはスクリーンエディットモードです。
収録のYSHRC_で,
set edhitmode=2
と定義されているため,所定ディレクトリにYSHRC_にある限り,RUNYSH.COM
を使おうと,YSH.EXEを直接起動しようとスクリーンエディットモードになります。
YSHRC_で定義する以外にも,起動時に-Sオプションを付けたり,起動後にシェ
ル予約変数edhitmodeを2に設定したり すれば,このモードとなります。
スクリーンエディットモードでは,下表に示したような編集機能が使えます。これ
により,過去に入力したコマンドラインを呼び出して,エディットカーソルを左右に
自在に動かして挿入・削除が行えます(エスケープ記号(デフォルトでは@)を使っ
て複数行入力してあるなら,上下にもカーソルが動きます)。カーソルキーや[削除]
[挿入]などの編集キーのほか,PFキーも使え,またWordSterライクなコントロー
ルキー操作もできます。お好みの方法で操作してください。
ヒストリ呼び出しの[前行]キーは,押すたびにヒストリを古いほうへと遡って,過
去に入力したコマンドラインを呼び出してきます。[次行]キーは逆に,押すたびにヒ
ストリの新しいほうを呼び出します。
なお,このキー配置が有効なのはコマンドライン入力時だけです。コマンドなどを
実行している最中は通常のキー操作になります。たとえば長いリストをtypeコマンド
で画面表示している最中に,[CTRL]+[S]・[CTRL]+[Q]でスクロールの中断・再開
ができます。
また,「開発環境」では,[PF11][PF12]を画面切り換えに利用しているため,YS
H86のヒストリ呼び出しキーとして利用することはできません。
制限事項としては,「スクリーンエディットモードを利用できるのは,画面が80字
×25行のコンソール画面になっているときだけであること」があげられます。80字×
20行などのほかのコンソール画面モードではスタンダードエディットモードでしか利
用できません。
スクリーンエディットモードで使用可能な編集機能
┌────────────────────┬───────────────┐
│ キー │ 機能 │
├────┬──────┬────────┼───────────────┤
│ │┌────┐│ │ │
│ ││リタ-ン││ │コマンド入力を終了する │
│ │└────┘│ │ │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│ │ │
│ ││ ESC ││ │入力行をキャンセルする │
│ │└────┘│ │ │
├────┼──────┼────────┼───────────────┤
│ │ │┌──┐ ┌─┐│入力行をキャンセルする。シェル│
│ │ ││CTRL│{│Z ││変数ignoreeofが設定さ│
│ │ │└──┘ └─┘│れていない場合には,さらにYS│
│ │ │ │Hも終了する │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│エディットカーソルを1文字右に│
│ ││ ィ │││CTRL│{│D ││進める │
│ │└────┘│└──┘ └─┘│ │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│エディットカーソルを1文字左に│
│ ││ ゥ │││CTRL│{│S ││戻す │
│ │└────┘│└──┘ └─┘│ │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│カーソルを1行上の行に移動させ│
│ ││ ェ │││CTRL│{│E ││る。先頭行であった場合には,そ│
│ │└────┘│└──┘ └─┘│の行の先頭に移動する │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│カーソルを1行下の行に移動させ│
│ ││ ォ │││CTRL│{│X ││る。最下行であった場合には,そ│
│ │└────┘│└──┘ └─┘│の行の末尾に移動する │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│エディットカーソルを現在行の先│
││F1 ││ ││CTRL│{│A ││頭に移動させる │
││TOL ││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│エディットカーソルを現在行の最│
││F2 ││ ││CTRL│{│F ││後のキャラクタに移動させる │
││EOL ││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│┌────┐│┌──┐ ┌─┐│エディットカーソルを先頭行の最│
││F3 │││ HOME │││CTRL│{│T ││初のキャラクタに移動させる │
││TOT ││└────┘│└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│エディットカーソルを最下行の最│
││F4 ││ ││CTRL│{│B ││後のキャラクタの次に移動させる│
││BOT ││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│エディットカーソルを次のワード│
││F6 ││ ││CTRL│{│R ││の先頭のキャラクタに移動させる│
││NWRD││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│エディットカーソルを直前のワー│
││F5 ││ ││CTRL│{│W ││ドの最後のキャラクタに移動させ│
││PWRD││ │└──┘ └─┘│る │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│カーソルの位置しているワードを│
││F7 ││ ││CTRL│{│U ││消去する │
││DWRD││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│エディットカーソル上のキャラク│
│ ││ 削除 │││CTRL│{│G ││タを消去し以降の文字列を1文字│
│ │└────┘│└──┘ └─┘│ずつ前に詰める │
├────┼──────┼────────┼───────────────┤
│ │┌────┐│┌──┐ ┌─┐│エディットカーソルより1文字左│
│ ││ハ(後退)│││CTRL│{│H ││側のキャラクタを消去し以降の文│
│ │└────┘│└──┘ └─┘│字列を1文字ずつ前に詰める。カ│
│ │ │ │ーソルも1文字左に移動する │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│現在カーソルの位置している行を│
││F8 ││ ││CTRL│{│Y ││削除する │
││DUN ││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│ │┌──┐ ┌─┐│カーソル位置より行末までのキャ│
││ F9 ││ ││CTRL│{│J ││ラクタを消去する │
││EEOL││ │└──┘ └─┘│ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│┌────┐│ │直前のヒストリ行をカーソル位置│
││F10 │││ 挿入 ││ │に挿入する │
││HINS││└────┘│ │ │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│┌────┐│ │コマンド行をクリアし,カレント│
││F11 │││ 前行 ││ │ヒストリの1つ前のヒストリ行を│
││HPRV││└────┘│ │コマンド行にコピーする │
│└──┘│ │ │ │
├────┼──────┼────────┼───────────────┤
│┌──┐│┌────┐│ │コマンド行をクリアし,カレント│
││F12 │││ 次行 ││ │ヒストリの次のヒストリ行をコマ│
││HNXT││└────┘│ │ンド行にコピーする │
│└──┘│ │ │ │
└────┴──────┴────────┴───────────────┘
━━━━━━━━━━ マクロプロセッサとしてのメカニズム ━━━━━━━━━
YSH86の大きな特長であり,かつ便利な機能として,マクロプロセッサ機能があ
ります。このマクロプロセッサ機能は,スクリーンエディット機能を利用して入力さ
れたコマンドラインを,それぞれのルールに従って整形・置き換えを行い,最終的に
はその整形されたコマンドラインを,YSH86のコマンド実行プロセッサ(コマンド
インタプリタ)に引き渡すします。
一度入力した文字列を有効活用したり,予め登録しておいた文字列を利用したり,
ワイルドカードで一括指定したりすることができ,同じようなことの反復実行や,定
型的な処理の簡易化,同様な複数ファイルの処理などが簡単に行えるようにするもの
です。
このマクロプロセッサ機能には,
ヒストリ置き換え
1行マクロ置き換え
シェル変数の展開
コマンド実行出力結果による置き換え
ファイル名展開(ワイルドカードなど)
クォート・エスケープ記号の最終処理
の6機能があります。以下個々の機能について解説します。なお,これらの機能の処
理順序は上記のとおりです。
●ヒストリ置き換え
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃<イベント指定> [:<指示子>] [:<修飾子>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
入力したコマンドのヒストリ(履歴)を記録し,その過去のヒストリを整形してコ
マンドラインを作成する機能で,エディット・コンパイル・実行などの単純な作業の
繰り返しには非常に便利です。
[前行][次行]キーを使ってコマンドライン上にワンタッチで呼び出して,スクリー
ンエディットすることもその機能の一部ですが,ここで解説するコマンド入力により
ヒストリ呼び出しも,ワンタイプで必要部分を切り出したりして使うことができ,な
かなか便利です。
コマンド入力でヒストリを使う場合は,<イベント指定>で展開しようとするヒスト
リを指定し,<指示子>で当該ヒストリのどの部分(どの引数部分)を展開するかを指定
します。<指示子>が省略された場合には,そのヒストリ行全体が展開されることにな
ります。<修飾子>は当該ヒストリをいかにモーデファイするかを指定します。
保存されるヒストリ行数は, シェル予約変数historyで設定されます。デフォルト
値は15に設定されていますので,YSHRC_などでhistoryの値を指定・変更していな
い状態では現在時点から15回前までのコマンド行がヒストリとして保存されます。シ
ェル予約変数historyに設定された指定行数を越えた場合には, 越えた分だけ古いヒ
ストリから順に削除されます。
なお,ヒストリには,YSH86の初期化ファイルYSHRC_やLOGINおよび後述するSO
URCEコマンドで実行されるコマンド群,そして制御構文の内側で実行されるコマンド
は登録されません。後述する,コマンド実行結果による置き換えで処理された途中結
果はヒストリに登録されます。
また,ヒストリ置き換えの行われた行は,その置き換えられた行が必ず実行前にス
クリーンにエコー表示されます。
<イベント指定>・<指示子>・<修飾子>にはどのようなものがあるかは,下記を参照
してください。なお,1つのイベント指定に対して,それぞれ1個ずつの指示子・修
飾子を使用しますが,pおよびe修飾子だけはほかの修飾子と併用可能となっています。
イベント指定
┌─────────────────┬──────────────────┐
│ イベント指定 │ │
├─────────────────┼──────────────────┤
│ II │直前のヒストリ(1つ前の入力行)の指│
│ │定 │
│ │ │
│ I# │現在の入力行の指定 │
│ │ │
│ I〈n〉 │〈n〉は数字であり,ヒストリ番号〈n│
│ │〉のヒストリを指定 │
│ │ │
│ I-〈n〉 │〈n〉は数字であり,〈n〉番前のヒス│
│ │トリを指定 │
│ │ │
│ I〈str〉 │〈str〉は文字列であり,行の最初が│
│ │〈str〉にマッチする最新のヒストリ│
│ │を指定 │
│ │ │
│ I?〈str〉? │〈str〉は文字列であり,行中に〈s│
│ │tr〉を含んでいる最新のヒストリを指│
│ │定 │
│ │ │
│ -〈str1〉-〈str2〉- │直前行のクイック置き換え。つまり,直│
│ │前のヒストリ行の〈str1〉を〈st│
│ │r2〉に置換する。ただし,最初の1個│
│ │の〈str1〉しか置換しない。II:│
│ │s/〈str1〉/〈str2〉/に同じ │
│ │ │
│-g:〈str1〉-〈str2〉-│クイック置き換えと同じであるが,存在│
│ │する〈str1〉すべてを置換する │
└─────────────────┴──────────────────┘
指示子
┌─────────────────┬──────────────────┐
│ 指示子 │ │
├─────────────────┼──────────────────┤
│ 〈n〉 │〈n〉は数字であり,〈n〉番目の引数│
│ │を指定(0はコマンド名) │
│ │ │
│ ^ │1番目の引数を指定 │
│ │ │
│ $ │最後の引数を指定 │
│ │ │
│ * │コマンド名(0)を除く,すべての引数│
│ │を指定(^_$に同じ) │
│ │ │
│ 〈n1〉-〈n2〉 │〈n1〉〈n2〉は数字で,〈n1〉番│
│ │目から〈n2〉番目までの引数を指定 │
│ │ │
│ -〈n2〉 │〈n2〉は数字で,コマンド名(0)か│
│ │ら〈n2〉番目までの引数を指定 │
│ │ │
│ 〈n1〉- │〈n2〉は数字で,〈n1〉番目から最│
│ │後の引数までを指定 │
│ │ │
│ 〈n1〉,〈n2〉,〈n3〉,c │〈n1〉〈n2〉等で指定されている引│
│ │数を指定 │
└─────────────────┴──────────────────┘
修飾子
┌─────────────────┬──────────────────┐
│ 修飾子 │ │
├─────────────────┼──────────────────┤
│ s/ 〈str1〉/ 〈str2〉/ │文字列〈str1〉を〈str2〉で置│
│ │換する │
│ │ │
│ & │前回の置換を繰り返す │
│ │ │
│ t │パスリストの末尾部分を切り出す │
│ │ │
│ h │パスリストの先頭部分を切り出す │
│ │ │
│ d │パスリストのドライブ名部分を切り出す│
│ │ │
│ f │パスリストの狭義のファイル名部分を切│
│ │り出す │
│ │ │
│ x │パスリストの拡張子を切り出す │
│ │ │
│ r │パスリストのルート(拡張子を除くフル│
│ │パスリスト)部分を切り出す │
│ │ │
│ g │上記の修飾子前に置くことにより,グロ│
│ │ーバルなアクションを指定する。つまり│
│ │行内のすべての該当部分に対してアクシ│
│ │ョンを起こさせる。これが指定されてい│
│ │ない場合には,一番最初に該当した部分│
│ │に対してだけアクションを起こす │
│ │ │
│ p │ヒストリ置き換え後,新たなヒストリと│
│ │して登録するが実行はされない │
│ │ │
│ e │ヒストリ置き換え後の行をスクリーンエ│
│ │ディットする │
└─────────────────┴──────────────────┘
●マクロコマンド置き換え
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃<マクロ名> [<引数 1> <引数 2> ... ] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
一種のコマンドの別名定義機能(いわゆるエリアス機能)で,<マクロ名>が1行マ
クロコマンドとして登録されている場合,それをその定義内容と置き換えます。これ
によりXCOPY.EXEをCOPYとかCPYという名前で起動したりできます。
引数の受け渡しもでき,定義内容の中で,%<n>(<n> は 1 ~ 9 の数字)の形式で
引数<n>番目の位置が指定されていれば, その位置に指定引数を埋め込めます。引数
指定が定義されていないマクロコマンドで引数が指定された場合には,その引数はそ
のまま定義内容にアペンドされて展開されます。
また,YSH86では1行のコマンドラインで複数のコマンドを実行できるので,機
能的には,1行マクロコマンドをバッチファイル(シェルスクリプトコマンド)のよ
うな感じで使うこともできます。ただ,バッチファイルよりも,この機能を利用した
ほうがオーバヘッドが少なく高速にコマンドを起動できますので。1行で定義できる
コマンドはバッチファイルにするよりも1行マクロにしたほうがよいでしょう。
なお,この1行マクロコマンドはネスティング(入れ子)が可能です。ネスティン
グされる1行マクロコマンドは,当然のことですが,先に予め定義されている必要が
あります。
この1行マクロコマンドは,YSH86の内部コマンドであるLMコマンドで定義さ
れ,UNLMコマンドで定義が解除されます。コマンドラインから直接定義すること
もありますが,通常はYSHRC_などの定義 ファイルで設定します。
●シェル変数の展開
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ $<変数名> [:<指示子>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ${<変数名>} [:<指示子>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
よく使う定数やパス名などのパラメータを,ユーザがシェル変数としてが自由に定
義できます。定義されたシェル変数は,コマンドライン上でコマンド実行前に展開さ
れますので,パラメータの短縮入力やバッチファイルの可読性向上に活用できます。
シェル変数を使うには,コマンドライン中の希望パラメータをシェル変数名で記述
するだけです。そのコマンドラインを実行すると,変数部分は事前に定義されている
内容で置き換わります。参照する変数が未定義であった場合には,ヌルで置き換えら
れます。
配列変数を参照することもでき,その場合は参照しようとする要素番号を「[」「]」で
囲みます。たとえば,変数asdの第2要素を参照するには,$asd[2] と指定します。要
素番号は1から始まります。配列変数で要素番号を指定しなかった場合には,その変
数の全要素が1個のスペースを間に挟んで展開されます。
なお,ダブルクォートの中では変数展開が行われますが,シングルクォートの中で
は変数展開は行われません。
1行マクロコマンドと同様,ネスティング展開もサポートしています。また,前述
のヒストリと同じ修飾子による変数モディファイも可能です。
変数の設定方法については,詳しくは次回説明する内部コマンドSETの部分で解
説しますが,基本的にはコマンド名SETのあとに変数名を書き,その直後に「=」で
つないで定義内容を記すだけです。
なお,この変数のなかには,YSH86によって事前に定義されている「特殊変数」
と「予約変数」が存在しています。予約変数の一部には,YSH86の重要な動作を決
定する,非常にクリティカルな変数もありますので充分に注意してください。特殊変
数と予約変数については,下記を参照してください。
特殊変数
┌───────────────┬────────────────────┐
│ 変数 │ │
├───────────────┼────────────────────┤
│ $〈n〉 │〈n〉は数字であり,$argv[〈n〉]│
│ │と同じ。シェルファイルの引数参照に使用 │
│ │ │
│ ミ │$argvと同じ。バッチファイルへのすべ│
│ │ての引数を展開 │
│ │ │
│ $%[〈変数〉] │〈変数〉の要素数で置き換える。〈変数〉が│
│ │省略された場合は$%argvと同じであり│
│ │,バッチファイルへの引数の個数で置き換え│
│ │られる │
│ │ │
│ $$ │カレントプロセス番号で置き換えられる │
│ │ │
│ $I │カレントヒストリ番号で置き換えられる │
│ │ │
│ - │$homeと同じ。ホームディレクトリ名(│
│ │YSH86起動時のディレクトリ)で置き換え│
│ │られる │
└───────────────┴────────────────────┘
予約変数
┌───────────────┬────────────────────┐
│ 変数名 │ │
├───────────────┼────────────────────┤
│ argc │バッチファイルへの引数の個数がセットされ│
│ │る │
│ │ │
│ argv │配列変数。バッチファイルへの引数が,その│
│ │各要素に順にセットされる │
│ │ │
│ bell │&H07がセットされる │
│ │ │
│ bs │&H08がセットされる │
│ │ │
│ casesensitive │ヒストリサーチ(I〈str〉,I?〈st│
│ │r〉?)や文字列評価式において大文字・小│
│ │文字を区別することを指示する。デフォルト│
│ │では未設定で区別しない │
│ │ │
│ cr │&H0Dがセットされる │
│ │ │
│ cwd │カレントディレクトリ名がセットされる │
│ │ │
│ date │今日の日付がMM/DD/YYの形式でセット│
│ │される │
│ │ │
│ dirstack │ディレクトリスタックの大きさを指定する(│
│ │デフォルト値は15) │
│ │ │
│ echo │置き換え完了後のコマンドラインをエコーす│
│ │る(デフォルトでは未設定) │
│ │ │
│ editarea │未使用(リザーブ) │
│ │ │
│ editmode │コマンドラインの編集モードを指定する。2│
│ │がスクリーンエディットモードであり,2以│
│ │外の値は,スタンダード編集モードを意味す│
│ │る(デフォルト値は0) │
│ │ │
│ errmsg │エラー発生時に使用するエラーメッセージフ│
│ │ァイルのパス名を設定する(デフォルトのパ│
│ │ス名はA:/SYS/ERROR.MSG) │
│ │ │
│ esc │&H1Bがセットされる │
│ │ │
│ escape │YSH86の解釈するエスケープキャラクタを│
│ │指定する(デフォルトでは@) │
│ │ │
│ ff │&H0Cがセットされる │
│ │ │
│ govar │if,while文の評価式の中でも変数を│
│ │展開することを指示する。デフォルトでは未│
│ │設定であり,評価式の中では変数を展開しな│
│ │い │
│ │ │
│ history │ヒストリ数を設定する(デフォルト値は15)│
│ │ │
│ home │ホームディレクトリ名(YSH86起動時のデ│
│ │ィレクトリ)がセットされる │
│ │ │
│ ignoreeof │ ┌────┐ ┌─┐ │
│ │EOFキー│CTRL│+│Z│が押されて│
│ │ └────┘ └─┘ │
│ │もYSH86を終了しない(デフォルトでは未│
│ │設定) │
│ │ │
│ internalscript │バッチファイルを実行する際,もう1つのY│
│ │SH86を起動せずに,カレントシェル上で内│
│ │部的に実行する。シェルスクリプトの第1引│
│ │数として,-iを指定した場合と同等である│
│ │。メモリ上のオーバーヘッドを避けることが│
│ │できる │
│ │ │
│ if │&H0Aがセットされる │
│ │ │
│ modchar │モディファイキャラクタを指定する(デフォ│
│ │ルト値は「:」)。ヒストリ・変数のモディ│
│ │ファイキャラクタとして使用 │
│ │ │
│ nodestory │標準出力や標準エラー入力のファイルへのリ│
│ │ダイレクト時,ファイルが存在していても,│
│ │オーバーライトせず,そのファイルを保護す│
│ │る(デフォルトでは未設定) │
│ │ │
│ nowild │ワイルドカードの展開を抑制する(デフォル│
│ │トでは未設定) │
│ │ │
│ path │配列変数であり,コマンド実行のためのサー│
│ │チパスが設定される(デフォルトでは,環境│
│ │変数PATHの要素が設定される) │
│ │ │
│ pathseparator │パス名の区切り記号を指定する(デフォルト│
│ │の値は「/」)。「/」か「¥」以外の値は絶│
│ │対与えないこと │
│ │ │
│ prompt │配列変数であり,プロンプト文字列が設定さ│
│ │れる。第1要素はメインプロンプトであり,│
│ │第2要素はサブプロンプトである。サブプロ│
│ │ンプトは制御コマンドを対話的に実行する際│
│ │出力される。初期値は,それぞれ「%」と「│
│ │?」であるが,自由に設定可能である。プロ│
│ │ンプト文字列に変数を含めることも可能であ│
│ │り,出力前に展開される │
│ │ │
│ r386option │配列変数であり各要素に,.EXPコマンド │
│ │起動時,RUN386.EXEに与えるオプ │
│ │ションを定義する。FM TOWNSにおい │
│ │てのみ有効(デフォルトでは未定義) │
│ │ │
│ scriptoption │配列変数であり,各要素に,バッチファイル│
│ │を実行する際,YSH86に渡すオプションを│
│ │設定する。バッチファイルは,カレントシェ│
│ │ルによって起動されるもう1つのYSH86に│
│ │よって実行される(変数internals│
│ │criptが設定されていない場合)。デフ│
│ │ォルトとしてオプション-pと-xが設定さ│
│ │れる │
│ │ │
│ status │一番最後に実行されたコマンドの終了コード│
│ │がセットされる │
│ │ │
│ syspath │システムパスを設定する。YSH86の内部で│
│ │このパスに,パイプ等のテンポラリファイル│
│ │が作成される。RAMディスクを指定するこ│
│ │とが推薦される(デフォルトのパスはカレン│
│ │トディレクトリ) │
│ │ │
│ tab │&H09がセットされる │
│ │ │
│ time │カレント時刻(最後のコマンド実行時刻)が│
│ │HH:MM:SSの形式でセットされる │
│ │ │
│ verbose │1行コマンドマクロ置き換え後,変数置き換│
│ │え前のコマンドラインがエコーされる(デフ│
│ │ォルトでは未設定) │
│ │ │
│ wildfile │ワイルドカードでマッチするファイルの最大│
│ │数を設定する。この変数が未設定の場合は,│
│ │64の値が採用される(デフォルトでは未設定│
│ │) │
│ │ │
│ yshrc │YSH86の初期化実行ファイルYSHRC_│
│ │のデフォルトパスを指定。内部コマンドSO│
│ │URCEの引数なしの場合のデフォルトパス│
│ │となる。 │
│ │YSH86起動時に,-iオプションが与えら│
│ │れた場合,そのパス名がこの変数にセットさ│
│ │れる。 │
└───────────────┴────────────────────┘
●コマンド実行結果による置き換え
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃`<コマンド>` ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
あるコマンドが標準出力へ出力した内容によって,コマンドラインの指定部分を置
き換える機能です。これにより,コマンドの組み合わせがより柔軟性に行えるように
なります。とくにUNIX流のコマンド入力を行う際には欠かせません。
逆シングルクォート「`」(&H60)で括られた中のコマンドを実行し, そのコマン
ドが標準出力に出力した内容で,`......`の部分を置き換えます。複数行に亘る出力
は,改行コード(&H0D・&H0A)が1個のスペースに変換されて1行に接続された
うえで,`.......` の部分を置き換えます。
変数の展開と同様,このコマンド実行結果による置き換えは,ダブルクォートの中
では展開されますが,シングルクォートの中では展開されません。
なお,`.......` の中では,変数展開および1行マクロコマンドの展開は実行され
ます。
なかなか便利な機能なのですが,残念ながらMS-DOS標準コマンドでは,標準出力
に対応していない,あるいはコマンドの連携利用を想定した出力書式になっていない
コマンドが多いため,利用できない・利用しにくいことがままあります。ただ,フィ
ルタコマンドの類を自作されている方にはフルに活用していただけると思います。
●ファイル名の展開1 ワイルドカード
特定条件のファイル名をピックアップするため,ファイル名の一部に「任意の文字
(列)」を表現するワイルドカードを使うこともできます。MS-DOSの標準の「*」「?」
に加えて「^」「[....]」「[^....]」をフォローしており,UNIXで使われている
ワイルドカード並みの機能をもちます。
ワイルドカードは,あくまでもファイル名のマッチングをテストしますので,大文
字・小文字は識別しません。与えられたワイルドカードにマッチしたファイル名は,
1個のスペースで区切られ,アルファベット順にソートされ,コマンドライン上に展
開されます。展開されるファイル名の数の最大数は,シェル予約変数wildfileで定義
されます。その初期値は64であり,64個までのファイル名が展開可能です。
また,シェル予約変数nowildを設定することにより(set nowild)ワイルドカード
の展開を抑制することができます。コマンド自体にワイルドカード機能をもっている
コマンド(厳密には同一予約キャラクタを使用するコマンド)を実行する場合は,こ
の変数nowildを設定するか,クォートやエスケープキャラクタを使用して,コマンド
側のワイルドカード機能を使うようにします(MS-DOS内部コマンドやXCOPY.E
XEなど)。
ワイルドカード規則
┌─────────┬──────────────────────────┐
│ワイルドカード文字│ │
├─────────┼──────────────────────────┤
│ * │ヌルを含むすべての任意の長さの文字列とマッチする │
│ │ │
│ ? │任意の1文字とマッチする │
│ │ │
│ ^ │次の1文字と一致しない場合,マッチしたと判定する │
│ │ │
│ [cc] │[ ]内のいずれかの1文字とマッチする │
│ │ │
│ [^cc] │[ ]内のどの文字とも一致しない場合,マッチしたと判│
│ │定する │
└─────────┴──────────────────────────┘
[ ]内ではマイナス記号で範囲の指定が可能である。 たとえば,[A-Z]はアル
ファベットすべての文字とマッチし,[2-4]は2,3,4とマッチする
●ファイル名の展開2 { } による展開
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ str1 {str2,str3,str4,....} str4 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
YSH86ではワイルドカードのほかにもファイル名の一部を指定文字(列)で置き換
える「{ }」を使った展開機能もあります。これを使うと一部だけ異なったファイ
ル名の指定が便利になります。
たとえば,
abc{d,e,f}gh
という指定は,
abcdgh abcegh abcfgh
というように展開されます。うまくワイルドカードと使い分けて利用してください。
なお,仕様上完全に文字列として扱われて,ファイル名とのマッチング照合は行わ
れないため,必ずしもファイル名に対してだけ展開されるとは限りませんことに注意
してください。
●クォートとエスケープ記号による展開抑制
これまで解説してきた,ヒストリ置き換え・1行マクロ置き換え・シェル変数の展
開・コマンド実行出力結果による置き換え・ファイル名展開は,いずれも便利な機能
ですが,場合によってはこれらによる展開処理を行ってほしくないこともあります。
そんなときは,展開したくない部分をダブルクォート・シングルクォートで括ったり,
直前にエスケープ記号を挿入したりして展開しない指示を出します。
●ダブルクォートとシングルクォート
ダブルクォート・シングルクォートは,パラメータのある部分を丸ごと展開抑制し
たい場合に使います。
基本的にはどちらを使っても同様の効果があがりますが,唯一の例外が,変数の展
開とコマンド実行結果による置き換えです。つまり,変数の展開とコマンド実行結果
による置き換えは,ダブルクォートの中では展開されるが,シングルクォートの中で
は展開されないということです。
ワイルドカードやその他の展開は,いずれのクォートの中でも展開されません。な
お,エスケープ記号は,いずれのクォートの中でも有効です(つまり効く)。
●エスケープ記号
エスケープ記号はシェル予約変数escapeで定義します。デフォルトでは@(アット
マーク)に定義されています。特別な事情がないかぎり,変更しないほうが無難でし
ょう。
エスケープ記号は,それに続く1文字から特殊な意味を失わせる働きをします。た
とえば,ワイルドカード予約キャラクタをエスケープ記号でエスケープすると,その
ワイルドカード予約キャラクは本来のワイルドカードとしての性格を失うことになり
ます。
また,エスケープ記号に続くキャラクタの1文字もしくは2文字が16進数キャラク
タ(0~9, A~F, a~f)であった場合には,それを該当するASCIIコードで置き換えま
す。
なおこのエスケープ機能には,上記の機能以外に下記に示すような,いわば予約さ
れた特殊なエスケープ機能もあります。
特殊エスケープ機能
┌─────────┬──────────────────────────┐
│特殊エスケープ機能│ │
├─────────┼──────────────────────────┤
│ @t │タブ(&H09)で置換される │
│ │ │
│ @r │キャリッジリターン(&H0D)で置換される │
│ │ │
│ @f │ラインフィード(&H0A)で置換される │
│ │ │
│ @b │バックスペース(&H08)で置換される │
│ │ │
│ @a │ベル(&H07)で置換される │
│ │ │
│ @n │ニューライン(&H0D・&H0A)で置換される │
└─────────┴──────────────────────────┘
━━━━━━━━━━コマンドインタプリタとしてのメカニズム━━━━━━━━━
コマンドラインに与えられたコマンドを解釈・実行することは,シェルのもつ最も
基本的な機能の1つです。このYSH86も例外ではありませんが,YSH86では,こ
の機能をCOMMAND.COMのそれよりもかなり 拡充してあります。以下,その機能につい
て説明していくことにします。
●コマンド起動のメカニズム
コマンド名としてフルパスリストが与えられた場合は,その与えられたパスだけを
サーチします。フルパスリストが与えられていない場合には,まずそれがYSH86の
内部コマンドであるかどうかを検査し,内部コマンドであった場合にはそれを実行し
ます。内部コマンドでなかった場合には,まず第一にカレントディレクトリをサーチ
し,次にMS-DOSの環境変数PATH上のディレクトリをサーチします。それでもコマンド
が発見できなかった場合には,最終的にYSH86の予約変数pathの示すディレクトリ
をサーチします。
なお,FM TOWNS におけるEXPコマンドのサーチは,通常のコマンドと全く同様に行
われます。
●バッチファイルファイル
COMMAND.COM では,バッチファイルのファイル名には必ず「.BAT」の拡張子を
つけなければなりませんでしたが,このYSH86では必ずしも「.BAT」の拡張子は必
要とはされません。たとえば,「SAMPLE.BAT」のほかに「SAMPLE」というバ
ッチファイルがあってかまいません。
バッチファイルの実行の優先順位は,拡張子のないバッチファイルのほうが優先さ
れます。
COMMAND.COMからも利用することが あるバッチファイルには拡張子「.BAT」を
付け,YSH86専用のものには拡張子を付けないようにするとよいでしょう。
なお,こうしたバッチファイルの実行は,通常,子シェルを起動してそれに行わせ
ますが,YSH86では親シェル(カレントシェル)の内部で実行されることができ,
これにより子シェルを起動することによるメモリ上のオーバヘッドは事実上なくすこ
とができます。
子シェルの起動を抑制するには,バッチファイルへの第1引数として-i オプショ
ンを指定するか,シェル予約変数internalscriptがセットしておけばOKです(ただし
-iオプション自体は,シェルファイル自体への引数としては解釈されず,シェル変
数argvには反映されません)。とくに理由がなければ,バッチファイルの実行にこの
機能を利用することをお勧めします。
●入出力のリダイレクト
入出力のリダイレクションでは,標準入力・標準出力に加えて,標準エラー出力を
利用できるようしました。また,標準出力および標準エラー出力では,オーバライト
指定したときのファイル保護機能を付加しています。加えて,シェルからコマンド内
へパラメータ入力する機能(いわゆるHERE DOCUMENT機能)もフォローしていま
す。これらにより,リダイレクトを使ってのコマンドの組み合わせがより柔軟に行え
ます。
各入出力のリダイレクト機能については,下記を参照してください。
入出力リダイレクト
┌─────────┬──────────────────────────┐
│ リダイレクト記号 │ │
├─────────┼──────────────────────────┤
│ <NAME │標準入力をNAMEにリダイレクトする │
│ │ │
│ >NAME │標準出力をNAMEにリダイレクトする │
│ │ │
│ >INAME │標準出力をNAMEにリダイレクトする。シェル変数no│
│ │destoryがセットされていても,常にNAMEにオ│
│ │ーバライトする。>NAMEの場合は,シェル変数nod│
│ │estoryがセットされていて,ファイルNAMEが存│
│ │在していれば,エラーを発生しファイルNAMEを保護す│
│ │る │
│ │ │
│ >+NAME │標準出力をNAMEにリダイレクトする。アペンド出力す│
│ │る(追加書き込み) │
│ │ │
│ >>NAME │標準エラー出力をNAMEにリダイレクトする │
│ │ │
│ >>INAME │標準エラー出力をNAMEにリダイレクトする。シェル変│
│ │数nodestoryがセットされていても,常にNAM│
│ │Eにオーバライトする。>>NAMEの場合は,シェル変│
│ │数nodestoryがセットされていて,ファイルNA│
│ │MEが存在していれば,エラーを発生しファイルNAME│
│ │を保護する │
│ │ │
│ >>+NAME │標準エラー出力をNAMEにリダイレクトする。アペンド│
│ │出力する(追加書き込み) │
│ │ │
│<<WORD │WORD LISTの各ワードを,シェルよりコマンドへ │
│ LIST│入力する(HERE DOCUMENT) │
│ │最初と最後のワードは同一である必要があり,それらは入│
│ │力されない │
└─────────┴──────────────────────────┘
●コマンドセパレータの機能
コマンドセパレータとして,パイプライン実行以外に, COMMAND.COMにない機能とし
て,コマンドの順次実行機能,AND実行機能およびOR実行機能を付加しました。 詳細
については下記を参照してください。
コマンドセパレータ
┌─────────┬──────────────────────────┐
│ セパレータ │ │
├─────────┼──────────────────────────┤
│ : │コマンドの順次実行。コマンドをいくつでも続けて実行で│
│ │きる │
│ │ │
│ & │コマンドの順次実行。コマンドをいくつでも続けて実行で│
│ │きる │
│ │ │
│ | │パイプライン実行 │
│ │ │
│ && │AND実行。たとえば<COMMAND A>&&<CO │
│ │MMAND B>の場合,<COMMAND A>の実行結│
│ │果が真(正常終了,変数statusの値が0)なら,<│
│ │COMMAND B>を実行する。偽なら<COMMAN │
│ │D B>を実行しない。 │
│ │ │
│ ∥ │OR実行。たとえば<COMMAND A>∥<COMM │
│ │AND B>の場合,<COMMAND A>の実行結果が│
│ │真なら,<COMMAND B>を実行しない。偽なら< │
│ │COMMAND B>を実行する。 │
└─────────┴──────────────────────────┘
「&&」と「||」を制御コマンドのカッコ内で使用する場合には,制御コマンド自体
に対するセパレータとして解釈されるのを防ぐために,それらをクォートで囲む必要
があることに注意してください。
上記に示したコマンドセパレータ以外にも,特殊なセパレータが2つあります(表
10「特殊セパレータ」参照)。この機能はメモリ上のオーバヘッドを伴うため,MS-D
OSではあまり実用的ではないかもしれませんが,バッチファイル記述の構造化に利用
できると思います。「#」以降をコメント化する機能のほうは便利に使えるでしょう。
特殊セパレータ
┌─────────┬──────────────────────────┐
│ セパレータ │ │
├─────────┼──────────────────────────┤
│ (cc) │( )内のコマンドのグループ化,子シェルでのコマンド│
│ │実行 │
│ │ │
│ # │#以降行末までをコメントとみなす。実行の対象とはなら│
│ │ない │
└─────────┴──────────────────────────┘
━━━━━━━━━━━━━━━言語インタプリタ機能━━━━━━━━━━━━━
以下では言語インタプリタ機能について,内部コマンド(レジデントコマンド)を
リファレンス的に解説することによって紹介します。YSH86は,大小とりまぜ合計
39個の内部コマンドをもっており,バッチファイルプログラミングに活用されます。
これらは大別すると,通常一般のコマンド,言語機能をサポートするコマンド,およ
び言語機能そのものである制御コマンドの3種類に分けられます。以下,コマンド種
類ごとに各コマンドをアルファベット順に解説していくことにします。また,各コマ
ンドを使ったバッチファイルの例も掲載していますのでそちらも参照してください。
そして,最後に全体的な注意点や,これまで触れれなかったその他の点について説明
します。
◆◆内部コマンド1 通常コマンド◆◆
●BRKSET
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃BRKSET [ON|OFF] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
[CTRL]+[C]のチェック機能を設定します(COMMAND.COMのBREAKコマンド
と同じ)。引数が与えられていない場合は,現在のステータスを標準出力に出力しま
す。
例
% brkset
BREAK <OFF>
●CD・CHDIR
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ CD [<Path Name>|<Drive Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ CHDIR [<Path Name>|<Drive Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
カレントディレクトリを変更します(カレントディレクトリの表示は後述のPWDコ
マンドで行います)。引数が与えられていない場合には,カレントディレクトリをホ
ームディレクトリ(YSH86起動時点のカレントディレクトリ)に変更します。<Dri
ve Name>が指定された場合には,カレントドライブを変更します。カレントドライブ
以外のドライブの<PathName>が指定された場合には,カレントドライブとカレントデ
ィレクトリを同時に変更します。
例
% pwd
A:\YSH
% cd d:\SOURCE
% pwd
D:\SOURCE
% cd a:
% pwd
a:\YSH
●DIRS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ DIRS ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
ディレクトリスタックの内容を標準出力に出力します。ディレクトリスタックにつ
いては,後述のPUSHDおよびPOPDコマンドを参照してください。
例
% dirs
A:\YSH D:\SOURCE A:\SYS A:\YSH
●ECHO
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ECHO [-n] [-e] [<String>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
-n:<String>の出力後改行しない(デフォルトでは改行する)
-e:標準エラー出力に出力する(デフォルトでは標準出力に出力)
引数<String>を標準出力もしくは標準エラー出力に出力します。
例
% echo "Today is $date"
Today is 03/21/90
●EXEC
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ EXEC [-s] <Command> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
-s:YSH86が占有しているメモリを解放する前に,YSH86およびMS-D
OSの環境情報ををディスクに保存する。このオプションを使う場合は,
必ず第1引数として指定する
YSH86が占有しているメモリを解放 し,<Command>を実行します。YSH86がR
UNYSHから起動されている場合には,EXECコマンド実行後,再び自動的にYSH86に
復帰することができます。-sオプションが指定された場合は,シェル変数・1行マ
クロコマンド・ヒストリ,ディレクトリスタックの情報およびMS-DOSの環境変数を,
変数syspathの示すパス上に以下のファイル名で保存してから<Command>を実行します。
SUSPEND.HIS ヒストリ情報
SUSPEND.VAR シェル変数情報
SUSPEND.MAC 1行マクロコマンド情報
SUSPEND.DIR ディレクトリスタック情報
SUSPEND.ENV MS-DOSの環境変数情報
これらのYSH86の環境情報およびDOSの 環境変数は,-sオプション付き起動の場
合は<Command>の実行終了後,YHS86に 復帰する際に自動的に回復されます。主に,
YSH86から直接起動できないほどの大きなプログラムを実行するために,このコマ
ンドは使用されます。
●HIS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ HIS ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
ヒストリ情報を標準出力に出力します。
例
% his
:
:
15 cd d:
16 his
% exec -s cl /c ysh.c (-s オプショnつきでEXECコマンド実行)
Microsoft (R) C Optimizing Compiler Version 5.10
Copyright (c) Microsoft Corp 1984, 1985, 1986 ......
ysh.c
% his
:
:
15 cd d:
16 his
17 exec -s cl /c ysh.c
18 his
(YSH86がRUNYSHから起動されていると仮定-ヒストリが保存・回復 されているのに注目)
●LM
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LM [<Macro Name>] [<Macro Definition>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
一種の拡張ALIASである1行マクロコマンドを定義します。引数が指定されてい
ない場合には,現在定義されている1行マクロの内容を標準出力に出力します。マク
ロ定義内容の中で,%<n>(<n>は数字)の 形で参照時の引数を指定し,その位置に引
数を埋め込むことができます。%<n>の引数位置の指定が全くない場合には,参照時の
引数はマクロ定義内容の後ろにマージされます。
例
% lm c a:/command /c
% lm dir c dir
% lm search 'dir %1 | find @@"%2@@"' (マクロ定義のネスト)
% lm
c a:/command /c
dir c dir
search dir %1 | find @"%2@"
% search d:\YSH YSH(引数が定義内容の指定位置に埋め込められる)
YSH C 10717 90-03-10 17:44
YSH H 489 90-02-14 16:47
YSH OBJ 5046 90-03-21 13:14
YSH EXE 62519 90-03-10 17:45
YSHRC_ 454 90-03-18 16:36
●LOADDIRS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LOADDIRS [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name> に保存してあるディレクトリスタックの内容をロードし,現在のディ
レクトリスタックの内容と置き換えます(逆に保存するには後述のSAVEDIRSコマ
ンドを使用します)。引数が指定されていない場合は,変数syspathに定義されている
パス上のファイルSUSPEND.DIRからディ レクトリスタックの内容をロードします。ロ
ード時にファイル内容のチェックを行いませんので注意してください。
例
% dirs
D:\
% savedirs (現在のディレクトリスタックを保存)
% pushd d:\include
D:\INCLUDE D:\
% pushd
D:\ D:\INCLUDE
% loaddirs (保存したディレクトリスタックをロード)
% dirs
D:\
●LOADHIS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LOADHIS [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<PathName>に保存してあるヒストリの内容をロードし,現在のヒストリにアペンド
します(ヒストリ保存は後述のSAVEHIS コマンドで行います)。引数が指定されてい
ない場合は,変数syspathに定義されて いるパス上のファイル SUSPEND.HISからヒス
トリの内容をロードします。ロード時にファイル内容のチェックを行いませんので,
充分注意してください。
●LOADLM
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LOADLM [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name>に保存してある1行マクロ の内容をロードし,現在の1行マクロにア
ペンドします(1行マクロの保存は後述のSAVELMコマンドで行います)。引数が指定
されていない場合は,変数syspathに定義 されているパス上のファイルSUSPEND.MAC
から1行マクロの内容をロードします。ファイル内容のチェックは行われませんので
充分注意してください。
例
% lm c a:/command /c
% lm dir c dir
% lm search 'dir %1 | find @@"%2@@"'
% lm
c a:/command /c
dir c dir
search dir %1 | find @"%2@"
% savelm (現在の一行マクロを保存)
% unlm (現在の一行マクロを削除)
% lm
% lm echon echo -n
% lm
echon echo -n
% loadlm (保存した一行マクロをロード)
% lm
c a:/command /c
dir c dir
echon echo -n
search dir %1 | find @"%2@"
●LOADVAR
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LOADVAR [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name> に保存してあるシェル変数の内容をロードし,現在のシェル変数にア
ペンドします(シェル変数の保存は後述のSAVEVARコマンドで行います)。引数が指定
されていない場合は,変数syspathに定義されているパス上のファイルSUSPEND.VARか
らシェル変数の内容をロードします。ロード時にファイル内容のチェックを行いませ
んので充分注意してください。
●LOGOUT
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ LOGOUT ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
現在のYSH86を終了します。もし現在のYSH86がログインシェルであり,かつ
カレントディレクトリ上にファイルLOGOUTが存在していれば,そのLOGOUTをバ
ッチファイルとして内部的に実行してからYSH86を終了します。ファイルLOGOUT
の内容のチェックは行いませんので,充分注意してください。
●POPD
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ POPD [+<n>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数が指定されていない場合は,ディレクトリスタックから先頭のディレクトリを
取り除き,カレントディレクトリを,ディレクトリスタックの新たな先頭のディレク
トリに設定します。<n>は数字であり,ディレクトリスタックの先頭から<n>番目のデ
ィレクトリを取り除きます(ディレクトリスタック先頭は0から始まります)。
例
% dirs
D:\
% pushd include (ディレクトリスタックの先頭に引数を積む)
D:\INCLUDE D:\
% pushd a:\YSH
A:\YSH D:\INCLUDE D:\
% pushd (ディレクトリスタックの先頭の 2 つを入れ替える)
D:\INCLUDE A:\YSH D:\
% pushd +2 (ディレクトリスタックを 2 回転させる)
D:\ D:\INCLUDE A:\YSH
% popd +2 (ディレクトリスタックの先頭から 2 番目を削除)
D:\ D:\INCLUDE
% popd (ディレクトリスタックの先頭を削除)
D:\INCLUDE
●PUSHD
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ PUSHD [<Directory>|+<n>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数が指定されていない場合には,ディレクトリスタックの先頭の2つを入れ替え,
カレントディレクトリをスタック先頭のディレクトリに設定します。<Directory> が
指定された場合は,その<Directory>を ディレクトリスタックの先頭に積み,カレン
トディレクトリをそのディレクトリに設定します。<n>は数字であり,ディレクトリス
タックを<n>回だけ回転させ,カレン トディレクトリをスタック先頭のディレクトリ
に設定します。
●PWD
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ PWD [<Drive>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数が指定されていない場合は,カレントドライブのカレントディレクトリ名を標
準出力に出力します。<Drive> が指定されている場合には,そのドライブのカレント
ディレクトリ名が標準出力に出力されます。
例
% pwd
D:\INCLUDE
% pwd a:
A:\YSH
●PXD
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ PXD ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
シェル配列変数pathの内容が1行に1要素ずつ標準出力に出力されます。
例
% pxd
.
A:\CMDS
A:\BINR
A:\BINB
A:\TOOLS
●SAVEDIRS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SAVEDIRS [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name> にディレクトリスタックの内容を保存します(回復するには前述のL
OADDIRSコマンドを使用します)。引数が指定されていない場合は,変数syspath
に定義されているパス上のファイルSUSPEND.DIRにディレクトリスタックの内容を保
存します。
●SAVEHIS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SAVEHIS [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name>にヒストリの内容を保存します(回復するには前述のLOADHISコマンド
を使用します)。引数が指定されていない場合は,変数syspathに定義されているパス
上のファイル SUSPEND.HISにヒストリの内容を保存します。
●SAVELM
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SAVELM [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name> に1行マクロの内容を保存します(回復するには前述のLOADLMコマン
ドを使用します)。引数が指定されていない場合は,変数syspathに定義されているパ
ス上のファイル SUSPEND.MACに1行マクロの内容を保存します。
●SAVEVAR
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SAVEVAR [<Path Name>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Path Name>にシェル変数の内容を保存します (回復するには前述のLOADVARコ
マンドを使用します)。引数が指定されていない場合は,変数syspathに定義されてい
るパス上のファイルSUSPEND.VARにシェル変数の内容を保存します。
●SET
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ (1) SET ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ (2) SET <Var Name>[=<Value>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ (3) SET <Array Var Name>=(<Value 1> <Value 2> ...) ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
シェル変数に値を設定します。
形式(1) では,現在設定されているシェル変数の内容を,アルファベット順に標準
出力に出力します。
形式(2)では,変数<Var Name>に値<Value>を設定します。値はすべて文字列形式で
格納されます。<Value> が省略された場合にはヌルが設定されます。
形式(3)では,配列変数<Array Var Name>に,そ の要素を一括代入します。配列要
素のベース番号は1から始まります。
変数名は,最初の1文字がアルファベットで始まり,YSH86で予約されているキ
ャラクタ(~@#$%^&*()-+{}[]エ|;:"'?/)以外のキャラクタが続く最大16文字長までの
文字列です。配列変数の個々の配列要素にアクセスする場合は,要素数を[ ]で囲み
変数名の後ろに付加します。
例
% set (変数内容の表示)
LoginTime 20:18:56
argc 0
argv
bell x07
bs x08
cr x0d
cwd A:\YSH
date 03/21/90
dirstack 15
dstack
editarea (0 0 79 8)
editmode 2
errmsg A:/SYS/ERROR.MSG
esc x1b
escape @
ff x0c
history 15
home A:\YSH
lf x0a
modchar :
path (A:\CMDS A:\BINR A:\BINB A:\TOOLS)
pathseparator /
prompt ('% ' '? ')
scriptoption (-p -x)
status 0
syspath .
tab x09
time 20:42:38
yshrc .
% set 'editarea[4]'=15 (配列変数の第 4 要素に代入)
% echo $editarea[4]
15
([ ] はワイルドカードの予約キャラクタであるため,上記のように
クォート等でエスケープする必要があります.ただし変数展開の場合
は,ワイルドカードより変数展開のほうが先に実施されるため,エス
ケープする必要はありません)
●SETENV
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) SETENV ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) SETENV <Env Var Name>=[<Value>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
環境変数に値を設定します。 形式(1)では現在設定の環境変数の内容を標準出力に
出力します。形式(2)では,環境変数<Env Var Name>に値<Value>を設定します。環境
変数についてはMS-DOSのマニュアルを参照してください。
例
% setenv
PATH=A:エCMDS;A:エBINR;A:エBINB;A:エTOOLS
INCLUDE=D:\INCLUDE
COMSPEC=A:\COMMAND.COM
LIB=D:\LIB
TMP=D:\
SHLEVEL=0
●SOURCE
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SOURCE [<Script File>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Script File> に記述されているコマンドを,カレントシェルの内部で(子シェル
を起動せずに)実行します。 引数が指定されていない場合には,シェル変数yshrcに
定義されているパス上のファイルYSHRC_が指定されたものとみなされます。この
コマンドの実行前に,シェル変数argvとargcが設定されますので,実行するバッチフ
ァイルに引数を渡すことができます。
●UNLM
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ UNLM [<Macro Name> ...] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数にて指定された1行マクロを除去します。引数が指定されていない場合には,
定義されているすべての1行マクロが削除されます。
例
% lm (一行マクロの内容の表示)
c a:/command /c
cls echo @1B@[2J
copy c copy
del c del
dir c dir
ex exec -s
md c md
type c type
% unlm del md (一行マクロ del および md の削除)
% lm
c a:/command /c
cls echo @1B@[2J
copy c copy
dir c dir
ex exec -s
type c type
●UNSET
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ UNSET <Var Name> [<Var Name 1> ...] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数にて指定されたシェル変数を削除します。一部のシェル変数はYSH86にとっ
て極めて重要な役割を果たしていますので,このコマンドを使用する場合は充分に注
意を払う必要があります。
●VER
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ VER [-y] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
MS-DOSもしくはYSH86のバージョン番号を標準出力に出力します。引数が指定
されていない場合にはMS-DOSのバ-ジョン番号を標準出力に出力します。-yオプ
ション付きの場合は,YSH86のバージョン番号を標準出力に出力します。
例
% ver
MS-DOS Version 3.1
% ver -y
YSH Version 1.0 for FRM/TOWNS
May 3, 1990
◆◆内部コマンド2 言語機能サポートコマンド◆◆
●CALC
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ CALC <Formula> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
<Formula>として与えられた整数四則演算式の計算結果を標準出力に出力します。
使用可能な演算子は以下のとおりです。
* 乗算記号
/ 除算記号
% 余り記号
+ 加算記号
- 減算記号
( ) カッコ(優先順位を変える)
優先順位は通常の四則演算式の優先順位と同一です。
例
% calc (8-6)/(19-17)
1
% calc '2+(8-6)*5'
12
( * はワイルドカードの予約キャラクタであるためを演算式をクォ
ートでエスケープする必要があります)
●EVAL
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) EVAL [-s] [!] <Value1> <Operator> <Value2> [<||>|<&&>] [...] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) EVAL [-s] [!] <File Operator> <Path> [<||>|<&&>] [...] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
-s:サイレントオプション。評価結果の「TRUE」「FALSE」を出力しない
! :リバースオプション。評価結果を反転させる
引数として与えられた評価式を評価し,その結果を標準出力に出力します。評価式
が真であった場合には「TRUE」を,偽であった場合には「FALSE」を出力し
ます。
形式(1)では, <Value1>と<Value2>にCALCコマンドと同じ四則演算式が使用可能
です。<Operator>は下記を参照してください。パターンマッチングには,ワイルドカ
ードと同一の規則が使用されます。
EVALコマンドのオペレータ
┌─────────┬──────────────────────────┐
│ OPERATOR │ │
├────┬────┤ │
│ 記号 │ 文字 │ │
├────┼────┼──────────────────────────┤
│ == │ EQ │Equal │
│ │ │ │
│ I= │ NE │Not Equal │
│ │ │ │
│ > │ GT │Greater │
│ │ │ │
│ >= │ GE │Greater or Equal │
│ │ │ │
│ < │ LS │Less │
│ │ │ │
│ <= │ LE │Less or Equal │
│ │ │ │
│ =~ │ MT │Pattern Match │
│ │ │ │
│ I~ │ MM │Pattern Not Match │
└────┴────┴──────────────────────────┘
形式(2)では,<Path>が<File Operator>として与えられた条件にマッチするかどう
かを評価します。
<File Operator>については下記を参照してください。||(OR)もしくは&&(AND)を用
いて,複数の評価式をつなげることもできます。
EVALコマンドのファイルオペレータ
┌─────────────┬──────────────────────┐
│FILE OPERATOR│ │
├─────────────┼──────────────────────┤
│ -r │Can Read │
│ │ │
│ -w │Can Write │
│ │ │
│ -x │Can Execute │
│ │ │
│ -e │Exist │
│ │ │
│ -z │File Length=Zero │
│ │ │
│ -f │Ordinary File(Not Dire│
│ │ctory) │
│ │ │
│ -d │Directory │
└─────────────┴──────────────────────┘
例
% set i=10
% eval "5+6 > $i" (5+6 が変数 i の値より大か?)
TRUE
% set pat=ASDF
% eval "$i != 15 && $pat '=~' A???"
(変数iの値が15ではなく,かつ変数patがA???にマッチするか?)
TRUE
% eval "$i EQ 11 || $pat NM A*"
(変数iの値が11であるか又は,変数patがA*にマッチしないか?)
FALSE
% eval -x ysh.exe (ファイルysh.exeは実行可能ファイルか?)
TRUE
% eval -d ysh.exe (ファイル ysh.exe はディレクトリか?)
False
% eval '-e ysh.c && -r ysh.c'
(ファイルysh.cが存在し,かつそれはリード可能ファイルか?)
TRUE
(オペレータは大概シェルの予約キャラクタになっているため,上
記例のようにクォートかエスケープキャラクタでエスケープする必
要があります)
●EXPR・@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) EXPR <Var Name>=<Formula> ┃
┃ @ <Var Name>=<Formula> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) EXPR <Var Name>++|-- ┃
┃ @ <Var Name>++|-- ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
形式(1)では,<Formula>として与えられた整数四則演算式の計算結果を変数<Var
Name>に代入します。<Formula>にはCALCコ マンドと同じ四則演算式が使用可能です。
形式(2)では,変数<Var name>の値を1つだけインクリメント(++)もしくはディク
リメント(--)します。
例
% expr i='8+2*(31-28)' (右辺の演算結果を変数 i に代入)
% echo $i
14
% expr i-- (変数 i の値を一つだけ減づる)
% echo $i
13
% while ($i @> 9) (変数iの値が9より大きい間ループする)
? echo $i
? @@ i-- (変数 i の値を一つだけ減づる)
? end
13
12
11
10
( @ は予約キャラクタ(エスケープキャラクタ)であるため,@ を
EXPRの代わりに使うときは,@ を連続使用してエスケープする必要が
あります)
◆◆内部コマンド3 制御コマンド◆◆
●FOREACH
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) FOREACH <Var Name> [(<Word List>)] ┃
┃ command(s) ┃
┃ END ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) FOREACH <Var Name> [(<Word List>)] ┃
┃ DO command ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
あるコマンドを(パラメータを変えながら)複数回実行するためのコマンドです。
形式(1)では,集合<WordList>の要素の数だけ,次の行からendまでの間に記述され
たコマンド群を繰り返し実行します。集合<Word List>の要素は順次<Var name> に代
入されますので,コマンド群のパラメータに<Var Name>を指定すると,集合の内容が
順次コマンドに与えられます。
形式(2)では,集合<Word List>の要素をの数だけ,DO以下に定義されたコマンドを
繰り返し実行します。集合<Word List> の要素は順次<Var name>に代入されますので,
コマンド群のパラメータに<Var Name>を指定すると,集合の内容が順次コマンドに与
えられます。
通常,集合には配列変数やワイルドカードを指定します。集合が省略された場合に
はシェル変数argvが指定されたものとみなされます(FOREACH iはFOREACH i ($argv)
と同等です)。
例
% set argv=(1 2 3)
% foreach i (変数argvが指定されたものとみなす)
? echo $i
? end
1
2
3
% foreach file (*.bat) do echo $file
(*.batにマッチするファイル名を順次,変数fileに代入し表示する)
CC.BAT
MKYSH.BAT
REC.BAT
SETCC.BAT
●REPEAT
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) REPEAT <n> ┃
┃ command(s) ┃
┃ END ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) REPEAT <n> DO command ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
形式(1)では,<n>は数字であり,REPEAT~END間のコマンドを<n>回繰返し実行します。形式(2)では,DO以下のコマンドを<n>回繰返し実行します。
例
% repeat 2 (endまでのコマンドを2回実行する)
? echo TEST
? pwd
? end
TEST
A:\YSH
TEST
A:\YSH
●WHILE
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) WHILE (<expr>) ┃
┃ command(s) ┃
┃ END ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) WHILE (<expr>) DO command ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
形式(1)では,評価式<expr>を評価し, その結果が真である場合にはwhile~endま
でのコマンド群を実行し,<expr>が偽になるまでそれを繰り返し実行します。
形式(2)では,評価式<expr>を評価し, その結果が真である場合にはdo以下のコマ
ンドを実行し,<expr>が偽になるまでそれを繰り返し実行します。
評価式は,前述のEVALコマンドの評価式と全く同一です(事実内部的には<expr>
を評価するに当ってEVALコマンドを-sオプション付きでコールしています)。詳細
はEVALコマンドの節を参照してください。評価式<expr>の代わりに通常のコマンドを
置いてもかまいません。その場合の評価は,そのコマンド実行結果が正常終了(シェ
ル変数status=0)であった場合に真であると評価されます。
例
% set j=8
% while ($j @> 4) (変数jの値が4以上である間,endまでを実行)
? echo TEST
? echo $j
? @@ j-- (変数 j の値を一だけ減ずる,j = j - 1)
? end
TEST
8
TEST
7
TEST
6
TEST
5
●IF
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1) IF (<expr>) ┃
┃ command(s) ┃
┃ [ELSE IF (<expr>) ┃
┃ command(s)] ┃
┃ [ELSE ┃
┃ command(s)] ┃
┃ ENDIF ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(2) IF (<expr>) DO command ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
形式(1)では,評価式<expr>を評価し,その結果が真である場合にはelse ifかelse
かendifまでのコマンド群を実行します。偽でありかつELSE IFがあれば,その<expr>
を評価し結果が真ならば,次のELSE IFかELSEかENDIF実行します。偽でありかつelse
があれば,ENDIFまでのコマンド群を実行します。
形式(2)では,評価式<expr>を評価し,その結果が真である場合には do以下のコマ
ンドを実行します。
評価式は,前述のEVALコマンドの評価式と全く同一です(事実,内部的には<expr>
を評価するに当たって,EVALコマンドを-sオプション付きでコールしています)。
詳細はEVALコマンドの節を参照してください。評価式<expr>の代わりに通常のコマン
ドを置いてもかまいません。その場合の評価は,そのコマンド実行結果が正常終了(
シェル変数status=0)であった場合に真であると評価されます。
例
% set j=ASD (変数 j に ASD を代入する)
% if ($j == ae) (もし変数 j の値がが ae であるならば)
? echo This is ae
? else if ($j == ASD) (もし変数 j の値がが ASD であるならば)
? echo This is ASD
This is ASD (変数 j の値ががASDであるので,echoコマンド実行)
? else
? echo This is other
? endif
%
●SWITCH
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SWITCH (<string>) ┃
┃ CASE <pattern 1> ┃
┃ command(s) ┃
┃ [BREAKSW] ┃
┃ CASE <pattern 2> ┃
┃ command(s) ┃
┃ [BREAKSW] ┃
┃ CASE <pattern 3> ┃
┃ : ┃
┃ : ┃
┃ [DEFAULT ┃
┃ command(s) ┃
┃ [BREAKSW]] ┃
┃ ENDSW ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
SWITCH行の<string>が各CASE行の<pattern n>とマッチするかどうかを検査し,マッ
チすれば,そのCASE行の次の行から次のCASE行かBREAKSWまでのコマンド群を実行しま
す。BREAKSWにぶつかった場合は,次のCASE行の<pattern n>をもはや検査することな
く,SWITCHコマンドを終了します。BREAKSWにぶつからなかった場合には, 以降のす
べてのCASEのパターンを検査し,マッチすればそのコマンド群を実行します。またそ
の場合には,DEFAULTはすべての パターンにマッチすることを意味するものとみなさ
れます。
パターンには文字列を指定しますが,ワイルドカードと全く同一規則のパターンマ
ッチング規則が適用されます。なお,このパターンマッチングは変数nowildの影響は
受けません。
例
% set j=ASD (変数 j に ASD を代入する)
% switch ($j)
? case asa (変数 j の値が asa にマッチするか?)
? echo asa
? breaksw
? case A* (変数 j の値が文字列パターンA*にマッチするか?)
? echo StartA
StartA (マッチするので echo コマンドが実行される)
? breaksw
? case ?T
? echo Tstring
? breaksw
? default
? breaksw
? endsw
%
●BREAK
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ BREAK ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
最も内側のループ(FOREACH・WHILE・REPEAT)を抜けます。
●CONTINUE
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ CONTINUE ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
ループの内側で使用され,ループ内の以降のコマンドを実行することなく,ループ
の先頭に戻りループコマンドを継続実行します。
●EXIT
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ EXIT [<status>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数<status>に指定された終了コードをもってYSH86を終了します。引数<statu
s>が省略された場合には,終了コードとしてゼロがかえされます(ゼロは通常,正常
終了であることを意味します)。
●REM
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ REM [<comment>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数<comment>をコメントとみなし何も実行しません。 #記号もコメントを意味し
ますが,決定的な違いは,順次実行記号である ; によって複数コマンドが指定されて
いる場合,REMは次のコマンドを実行しますが,#は以降の行全体をコメントとみなし
実行しないということです。
例
% echo 123;# ;echo 345
123 (# 以降のコマンドは実行されない)
% echo 123;rem sample;echo 345
123
345 (echo 345 は実行される)
●SHIFT
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ SHIFT [<Var>] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
引数<Var>に指定された配列変数をシフトします。引数<Var>が指定されていない場
合には,変数argvが指定されたものとみなされます。シフトするとは,シフト以前の
第2要素をシフト後の第1要素に,第3要素をシフト後の第2要素にという具合に
,配列変数の要素を1個ずつ下位(手前)の要素に再配置することを意味します。
例
% set argv=(1 2 3 4) (配列変数 argv をセットする)
% while ($argv) (配列変数 argv がヌルでない間)
? echo $argv
? shift (配列変数 argv をシフトする)
? end
1 2 3 4
2 3 4
3 4
4
━━━━━━━━━━━━━━━注意点・その他━━━━━━━━━━━━━━━━
●エラーコード
エラーメッセージファイルのパス名は,シェル変数errmsgに定義されます。デフォ
ルトのパス名はA:\SYS\ERROR.MSGです。errmsgに定義されているパス名が,ディレク
トリ名である場合には,ファイル名としてERROR.MSGが付加され,ディレクトリ名でな
い場合には,ファイル名として解釈されます。もし拡張子が付加されていない場合に
は.MSGが拡張子として付加されます。
エラーメッセージファイルのファイルフォーマットは,エラー番号とエラーメッセ
ージが1個のスペースもしくはタブで区切られている単純なテキストファイルです。
ここに定義される標準エラーコードはリストを参照してください
●コマンドラインの長さの制限
以下にあげる項目によりコマンドラインの長さが制限されます。
・コマンドラインバッファサイズ:現バージョン(1.0)では2Kバイト
・ワイルドカードによる展開:ワイルドカード展開に関わる制限には以下の2つ
(1) 展開後のコマンドラインの長さは2Kバイトまで
(2) ワイルドカード展開可能なファイル数はシェル変数wildfileに定義される
(デフォルトでは64)
・MS-DOS自体の制限:MS-DOS自体はコマンドの引数として最大長128バイトまでしか
受けつけない
●制御コマンド評価式(カッコ内)における変数の展開
WHILEおよびIFコマンドの評価式では,一番最初のWHILEおよびIFコマンドの解釈時
には変数は展開されません。一方,FOREACHおよびREPEATコマンドでは常にワンパス目
から変数,ワイルドカードが展開されます。
ただし,DO文を伴う1行コマンドの場合は,WHILE・IF・FOREACH・REPEATいずれの
場合でも,DO以下の行はワンパス目では変数,ワイルドカードとも展開されません。
実際にDO以下のコマンドが実行される際に初めて展開されることになります。したが
って,WHILE・IF・FOREACH・REPEATいずれの場合でも,DO以下の部分はエスケープす
る必要はありません(エスケープしてはいけません)。
例
% set i=0
% while ($i @< 3) do echo $i; expr i++
0
1
2
% set i=3
% set j=0
% repeat $i do echo $j; expr j++
0
1
2
●制御コマンドにおけるリダイレクト
制御コマンドにおけるリダイレクトは,制御構文内のリダイレクトしたい各コマン
ドを個別にリダイレクトすることになります。ループ内で標準出力をリダイレクトす
る場合は,アペンド出力リダイレクトを利用するとすべての出力をキャッチすること
ができます。
例
% set i=0
% while ($i @< 5)
? echo $i >+tmp(変数iの値をファイルtmpにアペンド出力する)
? @@ i++ (変数 i の値をインクリメントする,i = i + 1)
? end
% type tmp
0
1
2
3
4
% set j=0
% foreach i (*.exe) do echo $i >+tmp1; echo $j >+tmp1; expr j++
% type tmp1
HEADMAKE.EXE
0
YSH.EXE
1
GETS.EXE
2
●サブシェルコマンド
サブシェルコマンドにおける( )内のコマンドセパレータはエスケープされる必要
があります。
例
% (echo TEST @; pwd)
TEST
D:\
●ディレクトリパスの保存
YSH86によって起動された外部コマンドによって,カレントディレクトリが変更
されても,シェルのカレントディレクトリは変更を受けません。EXEC -sによって起
動されたコマンドがカレントディレクトリを変更しても同様です。
━━━━━━━━━━━━━━━━ おわりに ━━━━━━━━━━━━━━━━━
以上でYSH86についての紹介を終えます。
骨格的なことしか触れれず,具体的な応用方法まで筆がおよびませんでした。その
ため,MS-DOSのヘビーユーザや,OS-9やUNIXの操作経験がある方には充分で
も,MS-DOSの初心者の方には不親切であったと思います。
しかし,スクリーンエディット機能とヒストリ呼び出しは初心者の方でも即利用で
きると思います。まずはCOMMAND.COMの代 わりに使い,順次いろいろな機能を試して
みてください。
なお,シェルの活用法やバッチファイルプログラミングのコツについては,かなり
の分量になりますので,別な機会に要領よくまとめて解説したいと思います。
ともあれ,YSH86はコンソール画面での作業効率向上に大きく役立ちます。MS
-DOSのシステムディスクや,ORICONの作業ディレクトリにぜひ入れてご利用く
ださい。
━━━━━━━━━━━━━━著作権・再配布について━━━━━━━━━━━━━
このプログラムの著作権は作者が保持しておりますが,著作権法の定める「個人的
な利用」の範疇であれば自由に利用してくださってけっこうです。また,転載・配布
についても事前の許諾なしに自由に行ってくださってかまいません。ただし配布時に,
1. 「WHITE RAM」がプログラミングしたものであること
(補助ツ-ル(SCREEN.EXP,GCLS.COM)は「佐藤進一」がプログラミング)
2. Oh!FM'90年8月号~11月号に掲載されたものであること
3. 作者の自由転載許可に基づいて転載・配布したものであること
を,説明用のテキストに明記してください。