Document of the
	  ┏┓┳┳  ┳┏━┓┏━┓┏━┓
	  ┃┃┃┗━┫┣━┫┃  ┃┗━┓
	  ┻┗┛┗━┛┻  ┻┗━┛┗━┛
	          Free Software
	- Nihongo Yet Another Os/2 Shell -
	  1996,97,98,99 (c) HAYAMA,Kaoru

目次

1.はじめに
1.1 NYAOSとは!?
1.2 必要なソフトウェア
2.使用方法
2.1 インストール
2.2 起動方法
3.キー操作
3.1 デフォルトの操作
3.2 Vz互換ヒストリの使い方
3.3 Wordstarモード
3.4 変換型ファイル名補完
4.内蔵コマンドリファレンス
alias , bg , bind bindkey , cd , cds , comment , dirs , drvalias , echo , exec , exit , foreach , fg , jobs , history , lecho , ls , open , option , pushd , popd , pwd , rehash , source , unalias , which
5.置換
5.1 「...」「....」
5.2 ヒストリ(履歴)を参照する置換
5.3 環境変数を参照する置換
5.4 シングルクォートの変換
5.5 逆クォートの置換
5.6 命令の区切文字に関する置換
5.7 拡張プロンプト
6.スクリプト実行支援
6.1 UNIX(#!)型スクリプト
6.2 COM(SOS)型スクリプト
7.製作動機
8.制限事項
9.最後に
なお、変更履歴についてはファイルhistory参照のこと。

■■■■ 1.はじめに ■■■■

★ 1.1 NYAOS とは!?

NYAOS(Nihongo Yet Another Os/2 Shell)は、 tcshの操作性と、YAOSの実装方法を参考に、「日本語バッチソ」をモット−としつつも、便利なものは何でもとり入れようという無節操な姿勢で製作された、OS/2用コマンドラインシェルです。

主な特徴:

★ 1.2 必要なソフトウェア

NYAOS を利用するには次のソフトウェアが必要です。 NEC PC-9801 シリーズの OS/2 の場合、3.0 以降が必要になるようです。 かな漢字変換システム「かんな」を NYAOS から利用するには、以下が必要です。

■■■■ 2.使用方法 ■■■■

★ 2.1 インストール

install.cmd を実行すると、 が行なわれます。特にファイルのコピーなどは行われません。 かんなを使うには、さらに次のような操作が必要です。

(*) ホームディレクトリ…環境変数 HOME の差すディレクトリ

なお、カスタマイズファイルが見付からないなどのエラーが生じる場合はnyaos.rc に
	set CANNYA=<かんなシステムのドライブ>[,<カスタマイズファイル名>]
という定義を加えるなどしてください。 カスタマイズファイル名は省略できます。なお、NYAOS はカスタマイズファイルを
  1. %CANNYA%のファイル名
  2. %HOME%/.canna
  3. %CANNYA%のドライブの /usr/local/canna/lib/default.canna
  4. %SCRIPTPATH%のドライブの /usr/local/canna/lib/default.canna
の順に探します。

★ 2.2 起動方法

のいずれの方法でも NYAOS を起動させることができます。 なお、NYAOS のコマンドラインパラメーターは以下の通りです。
	NYAOS {-オプション} [起動ディレクトリ] ↓
で起動します。起動オプションは次のようなものがあります。
{/k|-k} command
commandを実行後、プロンプトを表示します。 タイトルロゴは表示しません。 nyaos.rc / .nyaos / _nyaos を読み込みません。
{/c|-c} command
commandを実行して、即、終了します。 タイトルロゴは表示しません。 nyaos.rc / .nyaos / _nyaos を読み込みません。
{/q|-q}
タイトルロゴを表示させません。
{/f|-f}
nyaos.rc / .nyaos / _nyaos を実行させません。
{/g|-g} WxH (W,Hは十進数,「x」は半角英小文字)
ウインドウサイズをW桁H行にします。「mode coW,H」を最初に実行するだけなので、プロンプト窓を最大化(Shiftを押しながら、タイトルバーをダブルクリックすればよかったっけ)していないと意味がありません。
{-h|/h} ディレクトリ
ホームディレクトリを指定し、環境変数HOMEに反映させます。-c や -k の前に指定してください。
NYAOS は、起動時に次の順にファイルを検索して、最初に見付けたものを実行します。
	 カレントディレクトリの .nyaos → _nyaos → nyaos.rc
	→ ホームディレクトリの .nyaos → _nyaos → nyaos.rc
これらは REXX でも記述できます(誰もやらんか(笑))

■■■■ 3.キー操作 ■■■■

基本的に tcsh をベースに Vz ライクなヒストリを交えたキーバインドとなっていますが、次のコマンドで変更することができます。
bind tcsh
ヒストリ参照も、tcsh と同じにします。
bind ws
ダイヤモンドカーソルをベースとしたバインドに変更します。
bind nyaos
デフォルトのバインドへ戻します。

★ 3.1 デフォルトの操作

「C-」はCTRLキ−と同時に押すことを示します。
	C-z (EOF)	NYAOSを終了
	C-m Enter	入力終結
	C-f →		カーソルを右へ移動
	C-b ←		     左へ移動
	Delete		カーソル上の文字を削除
	C-d		カーソル上の文字を削除。末尾では補完候補ファイル一覧
			オプションで NYAOS を終了する。
	Insert		上書きモードと挿入モードを切り換えます。
	C-h BS		カーソル前の文字を削除
	C-a Home	カーソルを入力文字列先頭へ移動
	C-e End		カーソルを入力文字列末尾へ移動
	C-u Esc		入力文字列をキャンセル
	C-k 		カーソル以降の文字を削除
	C-p ↑		ヒストリ参照 過去方向(Vz型)
	C-n ↓		       未来方向(Vz型)
	C-r                    過去方向(bash型インクリメンタルサーチ)
	C-s                    未来方向(bash型インクリメンタルサーチ)
	C-l		画面クリア
	C-t		カーソル左の二文字を入れ換える。
	Alt-f		カーソルを次の単語の先頭へ
	Alt-b		カーソルを今の単語の先頭へ
	C-i Tab		TCSH型のファイル名補完 (二回打つと、候補ファイル一覧)
	C-Tab Alt-Enter 変換型のファイル名補完
	C-v		続いて入力される制御文字をそのまま受け入れます
			(^@ ^J除く)
	F1		ファイル名をフルパスへ変換する
	F2		ファイル名をURL形式("file://c|〜")へ変換する。

★ 3.2 Vz 互換ヒストリの使い方

コマンド名の入力途中で C-p をタイプすると、それまで入力した文字列を含む入力行の残り全てが呼び出されます。(以下 ■ はカーソル)
	[C:/] echo ahaha ihihi ufufu
	[C:/] ec■
		↓[C-p]
	[C:/] echo ahaha ihihi ufufu■
引数の入力中に C-p をタイプすると、過去に入力した引数を呼び出します。
	[C:/] echo ufufu
	[C:/] echo ahaha ihihi
	[C:/] echo ■
		↓[C-p]  ↑[C-n]
	[C:/] echo ahaha■
		↓[C-p]  ↑[C-n]
	[C:/] echo ihihi■
		↓[C-p]  ↑[C-n]
	[C:/] echo ufufu■
		:

★ 3.3 Vz型キーバインド

「bind ws」と入力すると、次のようなキーバインドで編集することができます。 なお「^」はCTRLキ−を同時に押すことを示します。
	^Z (EOF)	NYAOSを終了
	^M Enter	入力終結
	^D →		カーソルを右へ移動
	^S ←		カーソルを左へ移動
	^G Delete	カーソル上の文字を削除
	^H BS		カーソル前の文字を削除
	^I Tab		ファイル名補完 (二回打つと、候補ファイル一覧)
	^A Home		カーソルを入力文字列先頭へ移動
	   End		カーソルを入力文字列末尾へ移動
	^U Esc		入力文字列をキャンセル
	^E ↑		ヒストリ参照 過去方向(Vz型)
	^X ↓		       未来方向(Vz型)
	^L		画面クリア
	^F		カーソルを次の単語の先頭へ
	^A		カーソルを今の単語の先頭へ
	^Tab Alt-Enter	変換型のファイル名補完
	^V		続いて入力される制御文字をそのまま受け入れます
			(^J ^@除く)
	F1		ファイル名をフルパスへ変換する
	F2		ファイル名をURL形式("file://c|〜")へ変換する。

★ 3.4 変換型ファイル名補完

Ctrl-TAB , ALT-RETURN での補完では、最初のキー操作以降、次のようなキーでファイル名を選択します。
	↓ C-t C-TAB TAB ALT-RETURN	次候補
	↑ ALT-BACKSPACE	 	前候補
	← C-g ESC			キャンセル
	→ C-m Enter			候補を確定する。
	   その他			候補を確定後、キーの機能を実行する。

■■■■ 4. 内蔵コマンド ■■■■

NYAOS では通常 CMD.EXE で使えるコマンドの他に、次のような内蔵コマンドが利用できます。

alias 別名 [[=] "置き換える構文"]

別名を登録します。置き換える構文は範囲を明示する為にも、なるべく、引用符で囲んでください。引数が無い場合、それまで定義した別名の一覧を表示します。置き換える構文中には、次のマクロが使えます。構文を省略した時は、既存の別名の定義内容を表示します。
""(連続する二つの引用符) :
一つの引用符に置換します。1.22 以前との互換性の維持の為、引用符で全体を囲んでいる場合にのみ有効です。
	[E:/] alias foo="echo ""ahaha"""
	[E:/] alias bar=echo ""ufufu""
	[E:/] alias
	foo=echo "ahaha"
	bar=echo ""ufufu""
%n : n番目の引数 (nは数字)
%* : 引数全体
%n* : n番目以降の引数
%@,%n@ : 基本的に「%*」,「%n*」と同じですが、次のような置換をします。
  1. 引数の先頭の「-」を「/」に置換。
  2. 引用符に囲まれていない「/」を「\」に置換。
  3. 引数の末尾が「/」「\」ならば、「.」を追加。
これらは主に、move や copy など OS/2風のオプション指定文字(/),パス区切文字(\)しか使えないコマンドで、UNIX風の同文字(-,/)を使いたい場合などに使います。該当するコマンドは .nyaos などで
	alias dir=dir %@
	alias copy=copy %@
	alias move=move %@
と指定しておけばよいでしょう。
%\ : 直前の文字が「\」や「/」なら空文字列へ、さもなければ「\」へ
%/ : 直前の文字が「\」や「/」なら空文字列へ、さもなければ「/」へ
alias命令には、1.22以前との互換性の維持の為にあえて修正していないバグがあります。<置き換える構文>を引用符で囲んでいない場合に「&」や「|」を用いると、その文字以降もエイリアス定義に含まれる一方で、その場で実際に実行されてしまいます。
	[E:] option -amp_start
	[E:] alias foo=echo ahaha & echo ufufu
	ufufu
	[E:] alias
	foo=echo ahaha & echo ufufu
<置き換える構文>を引用符で囲むと、このバグは回避できます。
	[E:] option -amp_start
	[E:] alias foo="echo ahaha & echo ufufu" & echo wahaha
	wahaha
	[E:] alias
	foo=echo ahaha & echo ufufu
%+* , %+n* , %+@ , %+n@ %+n :
ワイルドカードを展開する他は、%* , %n* , %@ , %n@ , %n と同じです。展開できるワイルドカードは今のところ * と ? だけです。

bg ウインドウ番号
・bg キーワード

指定されるウインドウを最小化にします。引数が数字ならば、ウインドウ番号とみなし、jobs命令で表示されるウインドウのうち、対応するものを最小化します。数字でない場合、その文字列をタイトルに含むウインドウを最小化します。

bind {tcsh|ws}

キ−バインドを一括変更します。wsはwordstar系です。

bindkey キ−の名前 機能名

キ−に個別に機能を割り当てます。キ−の名前として次のものが使えます。
	ALT_0		ALT_1		ALT_2		ALT_3
	ALT_4		ALT_5		ALT_6		ALT_7
	ALT_8		ALT_9		ALT_A		ALT_B
	ALT_BACKSLASH	ALT_BACKSPACE	ALT_C		ALT_COMMA
	ALT_D		ALT_DEL		ALT_DOWN	ALT_E
	ALT_END		ALT_EQUAL	ALT_ESC		ALT_F
	ALT_F1		ALT_F10		ALT_F11		ALT_F12
	ALT_F2		ALT_F3		ALT_F4		ALT_F5
	ALT_F6		ALT_F7		ALT_F8		ALT_F9
	ALT_G		ALT_H		ALT_HOME	ALT_I
	ALT_INS		ALT_J		ALT_K		ALT_L
	ALT_LEFT	ALT_LEFT_BRACKET		ALT_LEFT_QUOTE
	ALT_M		ALT_MINUS	ALT_N		ALT_O
	ALT_P		ALT_PAD_ASTERISK		ALT_PAD_ENTER
	ALT_PAD_MINUS	ALT_PAD_PLUS	ALT_PAD_SLASH	ALT_PAGEDOWN
	ALT_PAGEUP	ALT_PERIOD	ALT_Q		ALT_R
	ALT_RETURN	ALT_RIGHT	ALT_RIGHT_BRACKET
	ALT_RIGHT_QUOTE	ALT_S		ALT_SEMICOLON	ALT_SLASH
	ALT_SPACE	ALT_T		ALT_TAB		ALT_U
	ALT_UP		ALT_V		ALT_W		ALT_X
	ALT_Y		ALT_Z		BACKSPACE	BACKTAB
	CENTER		CTRL_A		CTRL_AT		CTRL_B
	CTRL_C		CTRL_CENTER	CTRL_D		CTRL_DEL
	CTRL_DOWN	CTRL_E		CTRL_END	CTRL_F
	CTRL_F1		CTRL_F10	CTRL_F11	CTRL_F12
	CTRL_F2		CTRL_F3		CTRL_F4		CTRL_F5
	CTRL_F6		CTRL_F7		CTRL_F8		CTRL_F9
	CTRL_G		CTRL_H		CTRL_HOME	CTRL_I
	CTRL_INS	CTRL_J		CTRL_K		CTRL_L
	CTRL_LEFT	CTRL_M		CTRL_N		CTRL_O
	CTRL_P		CTRL_PAD_ASTERISK		CTRL_PAD_MINUS
	CTRL_PAD_PLUS	CTRL_PAD_SLASH	CTRL_PAGEDOWN	CTRL_PAGEUP
	CTRL_PRTSC	CTRL_Q		CTRL_R		CTRL_RIGHT
	CTRL_S		CTRL_SPACE	CTRL_T		CTRL_TAB
	CTRL_U		CTRL_UP		CTRL_V		CTRL_W
	CTRL_X		CTRL_Y		CTRL_Z		DEL
	DOWN		END		ENTER		ESCAPE
	F1		F10		F11		F12
	F2		F3		F4		F5
	F6		F7		F8		F9
	HOME		INS		LEFT		PAGEDOWN
	PAGEUP		RETURN		RIGHT		SHIFT_DEL
	SHIFT_F1	SHIFT_F10	SHIFT_F11	SHIFT_F12
	SHIFT_F2	SHIFT_F3	SHIFT_F4	SHIFT_F5
	SHIFT_F6	SHIFT_F7	SHIFT_F8	SHIFT_F9
	SHIFT_INS	SPACE		TAB		UP
機能名としては次のものが使えます。
	accept_line , newline	入力終結
	backward_char		カ−ソルを左へ移動
	backward_delete_char	カ−ソルの左の文字を削除
	backward_word		前の単語の先頭へ移動
	beginning_of_line	先頭へ移動
	bye			NYAOS終了
	clear_screen		画面消去&再表示
	complete		TCSH型補完/補完リスト
	complete_first		変換型補完:最初の候補
	complete_to_fullpath	フルパスへの変換
	complete_to_url		URL形式への変換
	delete_char		カ−ソル位置の文字を削除
	delete_char_or_list	一字削除/補完リスト
	end_of_line		末尾へ移動
	forward_char		カ−ソルを右へ移動
	forward_word		次の単語の先頭へ移動
	kill_line               カ−ソル以降の文字を削除
	kill_top_of_line	カーソル以前の文字を削除
	kill_whole_line		入力文字全廃棄
	next_history , down_history
				最近の履歴参照
	previous_history , up_history
				過去の履歴参照
	quoted_insert		制御文字の入力
	vz_prev_history		Vz型の履歴参照(過去方向)
	vz_next_history		       (未来方向)
	self_insert		表示可能文字なら一字挿入
				さもなければ何もしない
	i_search	インクリメンタルサーチによる過去の履歴参照
	rev_i_search	インクリメンタルサーチによる最近の履歴参照
	swapchars	カーソル左の二文字を入れ換える。
次の機能は、変換型補完モードでのみ割り振られますので、上に上げた機能と同じキーに設定することができます。
	complete_fix		補完内容確定
	complete_next		次の補完候補へ
	complete_prev		前の補完候補へ
	complete_cancel		補完結果をキャンセル
	complete_default	確定後、そのキーの一般モードでの
				機能を呼び出します。

cd [-p] ディレクトリ名

カレントディレクトリを変更します。ディレクトリ名を省略した場合、option +cd_goto_home」が実行されていれば、環境変数HOMEの示すディレクトリへ移動。さもなければ、カレントディレクトリ名を表示します。ディレクトリ名として「-」を指定すると、直前のディレクトリへ移動します。
-p
ディレクトリが存在しない場合、環境変数CDPATHで指定されるディレクトリ下も検索します。デフォルトにしたい場合はalias cd="cd -p"を実行してください。

cds dir-1 dir-2
・cd {-s|-t} dir-1 [dir-2] ...

「cd e:/usr/local/bin」のように長い絶対パスを入力を「cds u lo b」のように、途中の経由ディレクトリ名を短縮して書くことができます。パスは空白で区切り、対象のドライブを「set cdshort=e: i: c:」と設定しておく必要があります。 「cd -s」は cds と等価です。

「cd -t」は基本的に「cds」と同じですが、部分ディレクトリ名は、ディレクトリ名の先頭からしかマッチしません。 つまり、\os2\boot に対し、「cd -s 2 b」や「cds 2 b」では移動できますが、「cd -t 2 b」ではできません。

comment ファイル名 コメント

ファイルに一行だけのコメントを書き込みます。コメントは拡張属性.COMMENTSに保存され、内蔵ls やプロパティの「ファイル(F)」の3ペ−ジ目で確認できます。

dirs [-v]

カレントディレクトリとディレクトリスタックの内容を表示します。 詳しくは「pushd」参照のこと。
-v
ディレクトリスタックを「番号 ディレクトリ」の形式で一覧します。

・drvalias drv1=drv2

以後、ドライブ文字drv1をドライブ文字drv2へ変換します。ドライブ文字の エイリアスと考えてください。

・echo

次のような文字列は、後に続く文字に変換して出力されます。
	^a ... ベル
	^n ... 改行復帰文字
	^v ... 垂直タブ
	^r ... 復帰文字
	^f ... 改頁文字
	^e ... ESC(0x1b)文字
	^c ... そこで出力を打切り、改行せずに終わる
	""(連続する二つの引用符) , ^q
	   ... 単一の「"」(^" は廃止しました)
	^^ ... 「^」
	^033 ^0 など「^」の後に3桁以内の8進数
	   ... その8進数をASCIIコ−ドとする文字
CMD.EXE native の echo とは違い、単一の引用符は表示されません。 (注) 以上の機能は、echo を先頭で使った場合のみ有効です。
	[E:] echo "aha""ha" & echo "ufu""fu"
と入力した場合、後者の echo は CMD.EXE 内蔵版 echoが呼び出されますので、画面には、
	aha"ha
	"ufu""fu"
と表示されます。(それにしても、例外が多いプログラムだなぁ...)

exec コマンド名 {引数}

NYAOS を終了し、かわりにコマンドを起動します。

exit

NYAOSを終了します。

foreach 変数名 値-1 値-2 ... 値-n
  :
 end

同じコマンド(群)を引数を変えながら実行するときに利用します。 cshのforeachと違い、名前-1...名前-n を括弧で囲んではいけません。 また、ネストもできません。 foreach を実行すると「?」、あるいは、環境変数NYAOSPROMPT2で指示したプロンプトを表示して端末からのコマンド行入力を促しますので、繰り返すコマンドを入力してください。コマンドは複数実行が可能なので、それらを逐次入力後、「end」か「^Z」の入力をもって、終了してください。 「source」や「-k」オプションで読み込まれるファイル中で使用するときは、コマンドは端末からではなく、そのファイルの続く行から取り込まれます。繰り返しコマンドの後には end行をおいてください。なお、REXXでファイルが記述されている場合、foreach は使えませんので、かわりに REXX命令のDO..ENDを使ってください。 コマンド行中の「$」+ 変数名 を 名前-1...名前-n に順に置換して実行します。「$」の後の変数名が、foreach 直後の引数と異なる場合、環境変数とみなします。変数名は「${変数名}」と書いても構いません。 一連の繰り返し命令の出力をリダイレクトする時は「^Z」で終了せず、
		end > ファイル名
		end | コマンド 引数 ...
で終了してください。

fg ウインドウ番号

 fg キーワード

指定されるウインドウをアクティブにします。引数が数字ならば、ウインドウ番号とみなし、jobs 命令で表示されるウインドウで対応するものがアクティブになります。数字でない場合、その文字列をタイトルに含むウインドウがアクティブになります。

jobs

ウインドウリストを
ウインドウ番号 : タイトル
の形式で一覧します。

history [n]

保存されている、n回前までの履歴を表示します。nを指定しないと全ての履歴を表示します。これをリダイレクトして、ファイルに保存すると、別の nyaos で「source -h」によって読み込むことができます。

lecho 引数1 引数2 ...

デバッグ用のコマンドです。引数がどのように評価されているのか確認できます。コマンド名自身がどのように置換されるかは、which を使って確認してください。

ls {-オプション} {ファイル/ディレクトリ名... }

カラー ls です。
	
	-a , --all 		HIDDEN属性、「.」で始まるファイルも表示する。
	-l			サイズや変更日時も表示する。

	-B , --ignore-backups	末尾がチルダのファイルを表示しない。
	-o , --color		カラー表示(default)
	-F , --classify		ファイル名の末尾に / や * を付ける(default)
	-R , --recursive	ディレクトリを再帰的に表示する。

	-r , --reverse		逆にソートする。
	-U			ソートしない。
	-X			拡張子でソートする。
	-S			サイズ順にソート
	-c			ファイルを作成した日時でソート・表示する。
	-t			最後に書き込みを行った日時でソート・表示する。
	-u			最後にアクセスした日時でソート・表示する。
	(以下、独自オプション)

	     --longname		ロングネーム(WPSでの名前)を表示
	-H , --inline-comment	一つ目のコメントをインラインで表示
	     --multi-comment	全コメントを表示
	-E			「--longname --inline-comment」と等価
	-P , --more		1ページづつ表示
	-O , --no-color		カラー表示を抑制します。
	-2 , --numeric-sort	ファイル名中の数字を数値として比較してソート
	-3 , --virge		スクロールを3行ごとに行う。
	-_ , --ignore-underbar	アンダーバーで始まるファイルを表示しない。
上以外のオプションが指定された場合、外部の ls.exe を呼び出します。 当然ながら、この場合、PATH上に ls.exe が必要となります。 リダイレクト/パイプ出力する際は、デフォルトでカラー表示や、ファイル名の後に / や * といった文字を付加しません。 必要な場合 -o や -F をつける必要があります。

オプションをデフォルト化するには、エイリアスを使って

alias ls="ls -o"

などと入力してください。

色の変更は、けんと(田村健人)氏のcolor-lsと同じで、次のように行います。

set LS_COLORS=xx=string:xx=string:xx=string...

設定項目(xx)は、以下のものがあります。
		項目	default	設定する内容
		lc	\e[	Left code
		rc	m	Right code
		ec	\e[0m	End code
		fi	1	Normal file (以降 type code)
		di	32;1	Directory
		sy	31;1	System file
		ro	33;1	Read-only file
		hi	44;37;1	Hidden file
		ex	35;1	Executable file

		cm	44;37;1 コメントの色指定
		ln	41;37;1 WPSでの名前の色指定
ファイルは
	<left code> <type code> <right code> filename <end code>
と表示されます。

open {-オプション} ファイル名

 open {-オプション} "<オブジェクトID>"

 open {-オプション} [オブジェクトID] ←省略可の[..]に非ず

ファイル、あるいは、オブジェクトをワークプレイスシェルで開きます。 オブジェクトIDは不等号の<と>を含むので、二重引用符で囲むか、 不等号<>を[]に置き換えて入力してください。ファイル名を省略すると、 カレントディレクトリをフォルダとして開きます。
	オプション:
		-p , -s	: プロパティー(設定ノートブック)を開きます。
		-i	: アイコン表示で開きます(*)。
		-t	: ツリー表示で開きます(*)。
		-d	: 詳細表示で開きます(*)。
		-o xxxx	: xxxx で指定される形で開きます。
			  例えば「-i」は「-o ICON」と等価です。
		-a      : ウインドウをアクティブにします。
(*) フォルダー/ディレクトリの場合のみです。

option {[+/-]スイッチ名 }

オプションを選択します。「option +echo」「option script」(以上有効化) 「option -amp_start」(無効)というように指定します。 オプションには次のようなものがあります。括弧内はデフォルトです。
amp_detach (-)
「&」がコマンド末尾にあれば、裏のセッションで起動します(detach)。 ただし、内蔵コマンドには働きません。amp_start より優先します。
amp_start (+)
「&」がコマンド末尾にあれば、別のセッションで起動します(start)。 ただし、内蔵コマンドには働きません。
auto_close (+)
末尾に「&」を付けて、VIOプログラムを別セッション実行して、 終了する時にウインドウを自動的にクローズさせます(start /F /C)。 「option amp_start」が+でなければなりません。
anywhere_history (+)
「!」による履歴置換機能をコマンドラインの先頭以外でも適用させます。
backquote (+)
逆クォートによる置換を許可(+)/禁止(-)します。
backquote_in_quote (-)
引用符の中の逆クォートの置換を許可します。
beep (+)
BEEP音を許可します。
complete_etc (+)
 オプション文字列や<WP_START>なども補完候補に含めます。
cd_goto_home (-)
 「cd」だけの入力で、環境変数HOMEの示すディレクトリへ移動します。
cmdlike_crlf (-)
 コマンド実行後、プロンプト表示前に改行します(CMD.EXE互換表示)。
complete_hidden (-)
 HIDDEN属性のファイルを補完リストに入れます。
complete_tail_slash (-)
補完時に加えるディレクトリの末尾を「\」ではなく「/」にします。
complete_tilda (-)
 末尾がチルダのファイルを補完リストに入れます。
ctrl_d_eof (-)
Ctrl+D で NYAOSを終了します。
ctrl_z_eof (+)
 Ctrl+Z でNYAOSを終了します。
debug (-)
 NYAOS の置換処理を逐次表示します。
direct_key (-)
 有効にすると、キー入力方法を変更します。 速くなるはずでしたが、速くなりません(笑)。 さらに、XFree86 上で動かなくなってしまいます。
dots (+)
 空白に続く...(3個以上のドット)を..\..の形式に変換します。
echo (-)
CMD.EXE に実際に渡される文字列を表示します。
history_in_doublequote (-)
 ダブルクォート間の「!」もヒストリ変換します。 シングルクォート間の「!」はこのオプションに関わらず変換しません。
honest (-)
 有効にすると、終了時に かんな の Warning などを洗いざらい白状します。
icanna (-)
 かんな変換をしないようにします。
ignore_cases (+)
 内臓コマンドの大文字・小文字を区別させません。
prompt_even_piped (+)
 標準入力が端末でない場合でも、プロンプトを表示します(for Mule)。
printexitvalue (+)
 外部コマンドのエラーコードが非0の時、画面にその値を表示します。
script (+)
スクリプト実行支援機能を有効にします。
script_cache (-)
 スクリプトに対し、実行する命令をキャッシングします。
semicolon (+)
 空白に続く「;」をstartを実行しない「&」に置換します。
single_quote (-)
 シングルクォートをダブルクォートに置換します。シングルクォート内の文字列の評価ルールはダブルクォートと若干異なりますので、注意が必要です。
slash_to_backslash_after_tilda (+)
空白に続くチルダ文字「~」より後の「/」を「\」に置換します。 次の tilda_home が ON になっている必要があります。
sos (-)
SOSスクリプトの実行を許可します。
tilda_home (+)
空白に続くチルダ文字「~」を環境変数HOMEの値へ置き換えます。
vio (+)
VIOの機能を使用します。プロンプト表示後、VIOでカ−ソルを強制表示させ、Promptの$Iの前後のアトリビュートを保存します。 off(-)状態では、画面表示にはエスケ−プシ−ケンスしか使用しません。
なお、以上のオプションは NYAOS 起動の際に
	nyaos --option+ (有効化)
	nyaos --option- (無効化)
のように変更させることもできます。

pushd [-p|-s|-t|-v] {ディレクトリ名 | +}

現在のカレントディレクトリをスタックに保存し、指定したディレクトリへ移動します。 cdpath や cd-short のオプションも cdと同様に使えます。 ディレクトリ名を省略すると、カレントディレクトリとスタックトップを交換します。ディレクトリ名として「-」を指定すると、直前のディレクトリへ移動します。
-v
ディレクトリスタックを「番号 ディレクトリ」の形式で一覧します。
+
ディレクトリスタックを回転させて、n番目のディレクトリをカレントディレクトリにします。

popd [-v] [+n]

スタックのトップに保存されているディレクトリにchdirし、 スタックトップを廃棄します。
-v
ディレクトリスタックを「番号 ディレクトリ」の形式で一覧します。
+n(n:数字)
n番目のスタックに移動する。

pwd

カレントディレクトリを表示します。

rehash

コマンド名補完・スクリプト実行の為のキャッシュを更新します。

set

通常の set の機能に加え、「+=」という演算子が使えます。 基本的に「set X+=A」は「set X=A;%X%」なのですが、 「;」で区切られた要素の重複チェックも行います。
		[C:\] set X=A;B;C
		[C:\] set X+=C
		[C:\] set X
		C;A;B
	
PATHの設定などに便利なはずです。

source[-h] ファイル名 {引数}

ファイルに記述された環境設定やエイリアス定義を読み込みます。 ファイルの最初の行を /*..*/ で始めれば、REXXで記述することもできます。この場合のみ、引数をARG関数などで参照できます。
-h
過去に「history > ファイル名」で保存したヒストリを、 現在の NYAOS のヒストリに読み込みます。

unalias

別名を破棄します。詳しくは「alias」参照のこと。

which コマンド名

実行されるコマンドの絶対パスを表示します。 エイリアスやスクリプトの場合は、置換の結果をまず表示します。 内蔵コマンドを使いたくない場合は、alias回避することができます。例えば、lsコマンドをもっと高機能な外部のlsと置き換えたい場合は、
	alias ls=ls.exe
と別名定義してください。ただし、ls に限って言えば、未サポートのオプションを見付けた場合、自動的に外部の ls.exe を呼び出すので、特にalias の必要はありません。

■■■■ 5.置換 ■■■■

NYAOS は入力文字列を様々に置換することによって、tcsh ライクな文法を実現しています。その一つ一つを以下で説明します。

★ 5.1 「...」「....」

空白に続く n個(n>2)のドットを次のように置換します。
	...	→ ..\..
	....	→ ..\..\..
	.....	→ ..\..\..\..
option -dots でこの置換を抑制できます。

★ 5.2 ヒストリ(履歴)を参照する置換

	!!	一つ前の入力文字列へ
	!n	最初から n 番目に入力文字列へ
	!-n	n 個前に入力した文字列へ
	!str	str から始まる、最も最近の入力文字列へ
	!?str?	str を含む、最も最近の入力文字列へ
option +anywhere_history
任意の位置の「!」を対象とする。
option -anywhere_history
先頭の「!」だけを対象とする。
ヒストリ置換には次のような語尾をつけることができます。
	:0	コマンド名を引用する。
	:m	m 番目の引数だけを引用する。
	:m-n	m 番目から n番目までの引数を引用する。
	:-n	コマンド名と n 番目までの引数を引用する。
	^	最初の引数だけを抜き出す。
	$	最後の引数だけを抜き出す。
	*	全ての引数を引用する。
なお、以上の語尾を ! の直後につけると、直前の入力に対する操作となります。

★ 5.3 環境変数を参照する置換

と置換します。また「~:」(チルダ+コロン)はブートドライブ名に置換します。
option (+/-)tilda_home
チルダを置換する/しない。
option +slash_to_backslash_after_tilda
チルダ以降の「/」を全て「\」へ変換する(括弧内参照)。

★ 5.4 シングルクォートの変換

シングルクォートをダブルクォートに変換します。ただし、ダブルクォートにすでに囲まれているものは除きます。また、シングルクォートに囲まれているダブルクォートは、ダブルクォート二個に変換します。

★ 5.5 逆クォートによる置換

逆クォート「`」で囲まれた文字列をコマンドとして実行して、その標準出力と置き換えます。ただし、逆クォート内に内蔵コマンドは置けません。逆クォート自身をコマンドに渡したい時は、逆クォートを二つ連続して書いてください。
'..`〜`..' (シングルクォートに囲まれた逆クォート)
→ 置換しない。そのまま。
"..`〜`.." (ダブルクォートに囲まれた逆クォート)
→ 〜の標準出力と置換する。
...`〜`... (クォートの類に囲まれていない逆クォート)
→ 〜の標準出力と置換する。ただし、複数の空白や改行文字などは 一個の空白となる。
option (+/-)backquote
逆クォートの置換を許可/禁止します。
option (+/-)backquote_in_quote
引用符内の逆クォートも対象に含める/含めない。

★ 5.6 命令の区切文字に関する置換

「A & B &」→ 「start A & start B」
A,B をそれぞれ別のセッションで実行する。 option amp_start を設定している際のみ有効です。
「A & B &」→ 「detach A & detach B」
A,B をそれぞれ裏のセッションで実行する。 option amp_detach を設定している際のみ有効です。
「A |& B 」→ 「A 2>&1 | B」
A の標準出力・標準エラー出力を、Bの標準入力へパイプする。
「A ; B」,「A &; B」→ 「A & B」
A , B を逐次実行します。option amp_start を設定している時に「&」の 代わりに用います。前者はoption semicolon を設定している場合のみ 有効で、かつ「;」の直前に一つ以上の空白が必要です。
これらの置換は、A,B は内部コマンドの場合、うまく実行されません。

★ 5.7 拡張プロンプト

通常のCMD.EXEでも使える文字に加えて、以下が環境変数PROMPTで使用できます。 環境変数として、NYAOSPROMPTが定義されている場合は、そちらを使用します。
   $ZA    ベル
   $ZH $! ヒストリ番号
   $ZV $@ カレントドライブのボリュームラベル
   $ZP    カレントディレクトリ(EAロングネームへの変換を行う)
   $W     カレントディレクトリ($HOME→「~」の変換を行う)
   ${..}  中括弧で囲まれた文字のドライブのカレントディレクトリを
	  画面最上行に表示する。例: ${cdef}

■■■■ 6.スクリプト実行支援 ■■■■

★ 6.1 UNIX(#!)型スクリプト

UNIX(というか、そのシェル)では、
  1. テキストファイルの先頭を「#!」で始め、
  2. その直後にインタープリタのコマンド名、および、オプションを書き、
  3. そのテキストファイルの実行属性を立てて(chmod +x)
おけば、そのテキストファイル(スクリプト)をあたかも単独のコマンドであるかの ように、実行する機能があります。

具体的には、例えば test.plというファイルが

	#!/usr/local/bin/perl
という行で始まっている場合、
	test.pl param-1 param-2 ...
という入力が
	/usr/local/bin/perl test.pl param-1 param-2 ...
と等価になります。これを NYAOS に取り入れてみました。 UNIXとの違いは次のような点があります。
  1. 実行属性がファイルの基本属性にはないので、「#!」で始まるかどうかだけを調べている。
  2. スクリプトの検索は、環境変数PATHではなく、SCRIPTPATHで行う。
  3. 環境変数 SCRIPTDRIVE にドライブ名を定義しておけば、インタープリタ名が「\」ではなく「/」で始まっている場合に、そのドライブ名をインタープリタ名の前に挿入する。
  4. 拡張子を省略した場合、EXE , CMD , COM , 拡張子無しの順にファイルを検索する。
1.は拡張属性を用いてもよかったのですが、ディスクアクセスが増えるだけなので、 見送りました。

2.は PATHを使うと、多くのディレクトリを検索しなければいけないので、ディスク アクセスの節約を考えた上の仕様です。

3.は、よく「#!/usr/local/bin/perl」と指定しているスクリプトに対する対応です。 UNIXのスクリプトをそのまま使えるようにしました。

環境変数の定義の例を次に示します。

	set SCRIPTPATH=.;e:/usr/script;e:/usr/bin
	set SCRIPTDRIVE=e:
以上の置換の対象は、入力した最初の単語だけではなく、「|」や「&」の直後にも 適用されるので、スクリプトのフィルタ的使用も可能です。
(注意)
一度、実行したスクリプトについては、使用インタープリタ名を記憶し、次回以降、そちらを利用します。その為「#!」行を変更しても、実際の実行に反映されない場合があります。その際は「rehash」と入力してください。

★ 6.2 COM(SOS)型スクリプト

NYAOS は SOS で作られたスクリプトを DOSプロンプトではなく、OS/2プロンプトで実行することも出来ます。SOS(Script language and Other application execution Support)は、奈良女子大学の新出尚之先生の開発された、DOS上で「#!」相当の機能を実現するソフトウェアです。

SOSによるスクリプトは、もちろん OS/2 上でも動くのですが、見かけ上、COMファイルなので、実行の度に PC-DOS窓が開いてしまい、あまり美しく動作できるとは言えません。

そこで、NYAOS は

場合、そのファイルを SOSスクリプトだと判断して、SOSヘッダの動作をOS/2 プロンプトでエミュレート(というほどのものではないが)する機能を追加しました。

基本動作は、「#!」形式のスクリプトと同じで、コマンドラインの置換で実現されています。この機能によって、DOS/OS/2共用のスクリプトを作ることができます。なお、拡張子「.com」の入力は省略できます。

■■■■ 7.製作動機 ■■■■

このプログラムを開発するまで、自分はLEE Cjin Pheow氏作の「Yet Another OS/2 Shell」を使っていました。 それは生のCMD.EXEに比べると、非常に快適な環境だったのですが、次のような不満がありました。
  1. dir命令の起動が遅い。
  2. ファイル名補完時に開かれる窓の枠が日本語環境だと見事に化ける。
  3. 倍角文字の右側にカーソルが移動する。
そこで、自分で OS/2 のコマンドラインのシェルを作ろうと思い至ったわけです。 製作にあっては、以下のような目標を立てました。
  1. 入力関係は、ほか(例えばエディタ)でも簡単に転用できるような C++クラスとする。
  2. DOS(VDM)でも使用できる。
  3. ファイル名補完は、できるだけ tcsh を目指す。
  4. 全機能(パイプやリダイレクト)を自分で作るのではなく、 CMD.EXE を system 関数で呼び出すだけのプログラムとする。
  5. 内蔵lsを用意する。
  6. 人に配るなら、エイリアスやヒストリーが必要。
1.0 の時点では、3.がまだまだでしたが、自分ではほぼ満足いくところまでできましたので、公開に踏みきりました。2. は当初DOS-Extender RSX.EXE を使うことで実現できていたのですが、 などの理由で、現在は VDM のサポートをやめています。

名前については、YAOSの日本語対応パッチと勘違いされないか心配ですが、ゴロのよさから、YAOS に"N"を付けて NYAOS --- Nihongo Yet Another Os/2 Shell としました。(でも、将来的には名前を変えるかも...) これからの展望としては

などを考えています。ですが、これらは仲々難しく、 当分先のことになると思われます。

■■■■ 8.制限事項 ■■■■

■■■■ 9.最後に ■■■■

当プログラムはフリーソフトウェアであり、使用は自由であり無料です。 著作権は作者 : 葉山 薫 にあり、放棄はしておりません。 配布・転載は歓迎ですが、当ドキュメントを必ず実行ファイルに添付してください。

ソースリストは別のパッケージ(tar+bzip2 によるアーカイブ)に含まれています。 こちらは GNU General Public Licence に従って、改変・再配布できます。

当プログラムを使用してうえで生じたいかなる損害についても、作者は責任を負いませんが、バグリポートを送っていただければ、次のバージョンでは、できるだけバグを修正させていただきます。

NYAOS の最新版は

http://www.vector.co.jp/authors/VA009797/warp/nyaos.html

より入手可能です。バグ・提案などありましたら

iya-hayamatta@ijk.com

までメイルください。

最後になりましたが、NYAOSの開発に際して協力いただきました、

   金島 岳  さん、宇野 篤也さん、山田 秀雄さん、奥西 藤和さん、
   吉田 孝一さん、松尾 浩  さん、我那覇 誠さん、赤木 有一さん、
   近藤 弘康さん、羽生 匡之さん、清水 洋  さん、相澤 邦彦さん、
   さとうひろもとさん、品野 竜太さん、大島 幸一さん、上野 博さん、
   我澤 賢之さん、松村 興さん、山野@NELさん、大久保 均さん、
   崎濱 たつひでさん、橋本 出さん、Altair☆さん、畠山@SRAさん、
   そして Sukisuki-OS/2 Mailing List の皆様方
にこの場を借りてお礼申し上げます。
サ | サ  --- はやまかおる(HAYAMA,Kaoru) -------
世 | 千 ♪ mailto:iya-hayamatta@ijk.com
木 山 黒 ★ http://hp.vector.co.jp/authors/VA009797/