The Documnent of
Nihongo Yet Another Os/2 Shell


┏┓┳┳ ┳┏━┓┏━┓┏━┓ ┃┃┃┗━┫┣━┫┃ ┃┗━┓ ┻┗┛┗━┛┻ ┻┗━┛┗━┛ Free Software - Nihongo Yet Another Os/2 Shell - 1996-2000 (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 , bind bindkey , cd , cds , comment , dirs , drvalias , echo , exec , exit , foreach , history , hotkey , lecho , let , 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 拡張プロンプト
5.8 拡張リダイレクト
6.スクリプト実行支援
6.1 UNIX(#!)型スクリプト
6.2 COM(SOS)型スクリプト
6.3 Java アプリケーション
7.シェル変数
8.子プロセスからの環境操作
9.製作動機
10.制限事項
11.最後に
なお、変更履歴についてはファイルhistory参照のこと。

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

★ 1.1 NYAOS とは!?

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

主な特徴:

★ 1.2 必要なソフトウェア

NYAOS を利用するには次のソフトウェアが必要です。 かな漢字変換システム「かんな」を 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 の前に指定してください。
-z キーバインドを WordStar ライクにします。nyaos -k "bind ws"」と同じです。
NYAOS は起動時に次の順にファイルを検索して、最初に見付けたものを実行します。
	 カレントディレクトリの .nyaos → _nyaos → nyaos.rc
	→ ホームディレクトリの .nyaos → _nyaos → nyaos.rc
これらは REXX でも記述できます(誰もやらんか(笑))

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

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

★ 3.1 デフォルトの操作

「C-」はCTRLキ−と同時に押すことを示します。
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
続いて入力される制御文字をそのまま受け入れます(^@ 除く)
F1
ファイル名をフルパスへ変換する
F2
ファイル名をURL形式("file://c|〜")へ変換する。
C-Space
カーソル位置にマークをつけます。
C-w Alt-X C-Del
マークからカーソル位置までのクリップボードへコピーした後に削除します。
Alt-w Alt-C C-Ins
マークからカーソル位置までをクリップボードへコピーします。
C-y Alt-V Alt-Ins
クリップボードの内容をペーストします。

★ 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キ−を同時に押すことを示します。
^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
続いて入力される制御文字をそのまま受け入れます。(^@除く)
F1
ファイル名をフルパスへ変換する
F2
ファイル名をURL形式("file://c|〜")へ変換する。
^B
カーソル位置にマークをつけます。
^Y Alt-X ^Del
マークからカーソル位置までのクリップボードへコピーした後に削除します。
^K Alt-C ^Ins
マークからカーソル位置までをクリップボードへコピーします。
^J Alt-V Alt-Ins
クリップボードの内容をペーストします。

★ 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:alias 別名 [[=] "置き換える構文"]

別名を登録します。置き換える構文は範囲を明示する為に引用符で囲んでください。引数が無い場合、それまで定義した別名の一覧を表示します。置き換える構文中には、次のマクロが使えます。構文を省略した時は、既存の別名の定義内容を表示します。
%n
n番目の引数 (nは数字)
%*
引数全体
%n*
n番目以降の引数
%n:h
n番目の引数のディレクトリ部分
%n:t
n番目の引数のディレクトリ以外の部分
%n:r
n番目の引数の拡張子以外の部分
%n:e
n番目の引数の拡張子部分
%@,%n@
基本的に「%*」,「%n*」と同じですが、次のような置換をします。
  1. 引数の先頭の「-」を「/」に置換。
  2. 引用符に囲まれていない「/」を「\」に置換。
  3. 引数の末尾が「/」「\」ならば、「.」を追加。
これらは主に、move や copy など OS/2風のオプション指定文字(/)、パス区切文字(\)しか使えないコマンドで、UNIX風の同文字(-,/)を使いたい場合などに使います。該当するコマンドは .nyaos などで
	alias dir=dir %@
	alias copy=copy %@
	alias move=move %@
と指定しておけばよいでしょう。
%\
直前の文字が「\」や「/」なら空文字列へ、さもなければ「\」へ
%/
直前の文字が「\」や「/」なら空文字列へ、さもなければ「/」へ
%+* , %+n* , %+@ , %+n@ %+n
ワイルドカードを展開する他は、%* , %n* , %@ , %n@ , %nと同じです。展開できるワイルドカードは今のところ * と ?だけです。
""(連続する二つの引用符)
一つの引用符に置換します。
	[E:/] alias foo="echo ""ahaha"""
	[E:/] alias
	foo=echo "ahaha"

構文2:alias -s

alias の一覧を、それぞれ「alias 別名="内容"」という形式に直して、標準出力に出力します。これをリダイレクトしておけば、alias のセーブすることができます。別の NYAOS などで、ロードするには、リダイレクトしたファイルをそのまま source すればOk です。

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形式への変換
	copy			マーク〜カーソル間の文字列を
					クリップボードへ複写
	cut			マーク〜カーソル間の文字列を
					クリップボードへ移動
	delete_char		カ−ソル位置の文字を削除
	delete_char_or_list	一字削除/補完リスト
	end_of_line		末尾へ移動
	forward_char		カ−ソルを右へ移動
	forward_word		次の単語の先頭へ移動
	kill_line               カ−ソル以降の文字を削除
	kill_top_of_line	カーソル以前の文字を削除
	kill_whole_line		入力文字全廃棄
	mark			カーソル位置をマークする
	next_history , down_history
				最近の履歴参照
	paste			クリップボードの内容を挿入する。
	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」ではできません。

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 [-ivn] 変数名 値-1 値-2 ... 値-n
  :
 end

同じコマンド(群)を引数を変えながら実行するときに利用します。cshのforeachと違い、名前-1...名前-n を括弧で囲んではいけません。また、ネストもできません。

foreach を実行すると「?」、あるいは、環境変数NYAOSPROMPT2で指示したプロンプトを表示して端末からのコマンド行入力を促しますので、繰り返すコマンドを入力してください。コマンドは複数実行が可能なので、それらを逐次入力後、「end」か「^Z」の入力をもって、終了してください。

「source」や「-k」オプションで読み込まれるファイル中で使用するときは、コマンドは端末からではなく、そのファイルの続く行から取り込まれます。繰り返しコマンドの後には end行をおいてください。なお、REXXでファイルが記述されている場合、foreach は使えませんので、かわりに REXX命令のDO..ENDを使ってください。

コマンド行中の「$」+ 変数名 を 名前-1...名前-n に順に置換して実行します。「$」の後の変数名が、foreach 直後の引数と異なる場合、環境変数とみなします。変数名は「${変数名}」「$(変数名)」「%変数名%」と書いても構いません。

変数名の直後に以下の修飾子を置いて、 文字列の一部を抽出することもできます。

	$i:h or %i:h% … $i のディレクトリ部分を取り出す。
	$i:t or %i:t% … $i のディレクトリ部分以外を取り出す。
	$i:r or %i:r% … $i の拡張子を除いた部分を取り出す。
	$i:e or %i:e% … $i の拡張子を取り出す。

一連の繰り返し命令の出力をリダイレクトする時は「^Z」で終了せず、

	end > ファイル名
	end | コマンド 引数 ...
で終了してください。
-i
コマンドのリターンコードが 0 でなくとも実行を中断しない。
-n
実行すべきコマンドを(標準出力に)表示するだけで 実際には実行しない。
-v
実行すべきコマンドを(標準エラー出力に)表示した後実行する。

history [n]

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

hotkey キーの名前 プログラム名

キーに実行プログラムを割り当てます。

lecho 引数1 引数2 ...

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

let シェル変数名[=値] …

シェル変数に値を設定します。 詳細は「7.シェル変数」を参照ください。

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での名前)を表示
-j , --subject .SUBJECT拡張属性を表示
-H , --inline-comment 一つ目のコメントをインラインで表示
--multi-comment 全コメントを表示
-E 「--subject --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;1Hidden file
ex 35;1 Executable file
cm 44;37;1コメントの色指定
ln 41;37;1WPSでの名前の色指定
sj 42:37;1サブジェクトの色指定
ファイルは
	<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」と等価です。
(*) フォルダー/ディレクトリの場合のみです。

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 (+)
 内臓コマンドの大文字・小文字を区別させません。
noclobber (-)
 リダイレクトによるファイル上書きを禁止します。 チェックできるのは、直接キーボードからタイプしたファイル名だけで、source で読み込むファイル や nyaos.rc 、alias の内側に記述されたファイル名についてはノーチェックです(上書きされてしまいます)。このオプションが設定されている時に上書きするには「>!」「>>!」「2>!」などの記号を利用します。
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の値へ置き換えます。
tilda_without_root (-)
 直後に \ や / の続かないチルダを %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

コマンド名補完・スクリプト実行の為のキャッシュを更新します。 オプションとしては次のようなものがあります。
-n
キャッシュが空の時だけ、キャッシュを読み込む。1.61 より、キャッシュを同一マシンで動く全 NYAOS のプロセスで共有するようになりました。そのため、nyaos.rc に「rehash」を入れておくと、せっかくキャッシュが読み込まれているのに、読み込み直すため、不経済です。かといって、入れないと、正真正銘の最初の補完の際に時間がかかってしまいます。「rehash -n」は、nyaos.rc 専用のオプションと考えればよいと思います。
-q
寡黙になる

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|-e} ファイル名 {引数}

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

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で使用できます。
$ZA ベル
$ZH $! ヒストリ番号
$ZV $@ カレントドライブのボリュームラベル
$ZP カレントディレクトリ(EAロングネームへの変換を行う)
$W カレントディレクトリ($HOME→「~」の変換を行う)
${..} 中括弧で囲まれた文字のドライブのカレントディレクトリを画面最上行に表示する。例: ${cdef}
シェル変数PROMPT には、拡張マクロを使ったプロンプトを。 環境変数PROMPT には、CMD.EXE でも使えるマクロだけのプロンプトを定義することを お薦めします。
[例]
	let prompt=$w[$zh]
	set prompt=[$p]
環境変数 NYAOSPROMPT も同様に使用できます。

★ 5.8 拡張リダイレクト

CMD.EXE で通常使える「>」「>>」「2>」「2>>」「2&>1」「|」の他に次のようなものが使えます。

>& ファイル名
標準出力・標準エラー出力ともに、一つのファイルへリダイレクトします。
|& コマンド名
標準出力・標準エラー出力ともに、別のコマンドの標準入力へ接続します。

option +noclobberを用いると、リダイレクトで上書きを禁止することができます。

>! ファイル名
2>! ファイル名
>&! ファイル名
同名のファイルが既に存在しても、上書きします。「option noclobber」で、上書き禁止モードになっていても有効です。

■■■■ 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」の入力は省略できます。

★ 6.3 Java アプリケーション

Java アプリケーション XXX.class を実行する際、通常は「java XXX」と入力する必要があります。NYAOS では、これを単に「XXX.class」と入力して実行することができます。

一見、文字数が増えるので、メリットが無いように見えますが、1カラム目から CLASSファイル名を書くので、コマンド名補完が効きますので、TABキーだけで「.class」部分も入力でき、手間的には多少は楽になると思います。

なお、コマンド名補完は、環境変数 CLASSPATH にリストアップされている、ディレクトリ上の .class ファイルのみ有効です。zip/jar アーカイブの中までは検索しません。

なお、java コマンドに渡す引数は、環境(シェル)変数 JAVAOPT に設定してください。

■■■■ 7.シェル変数 ■■■■

シェル変数とは、NYAOS内でしか参照できない環境変数のようなものです。 NYAOS で用いる変数と、他の(NYAOSから呼び出される)アプリケーションで 使用する変数がバッティングしないように用意したものです。

シェル変数の設定には「let」を使います。 csh の set コマンドとほぼ同じように使います。

  ・シェル変数への代入:
		let VAR1=VALUE1 VAR2=VALUE2 … ↓
	「=」の前後に空白が入ってはいけません。

  ・シェル変数の参照:
		let VAR1 VAR2 ↓
		echo %VAR1% %VAR2% ↓
	二番目の記法では環境変数と区別がつきません。

  ・定義されている全シェル変数の列挙
		let ↓

  ・シェル変数の削除
		let VAR1= ↓

従来の NYAOSの内蔵コマンドで、環境変数を参照するものは、全てシェル変数も参照するようになります。該当するシェル変数が未定義の場合、同名の環境変数を参照します。シェル変数名は大文字・小文字を区別しません。

特殊なシェル変数として次のようなものがあります

ATEXIT
NYAOS 終了時に実行すべきコマンドを設定できます。
CWD
現在のカレントディレクトリを保持しています。
NOTPATHCHAR
補完の際に、パス名に含めて欲しくない文字を定義できます。例えば、「let NOTPATHCHAR="+-;@"」としておけば、「netselect @~/hobb」と入力している時、「@」が邪魔で補完できないというのを回避できます。

■■■■ 8.子プロセスからの環境操作 ■■■■

通常、子プロセスは、親プロセスの環境(カレントディレクトリ・環境変数)を操作することはできませんが、NYAOS は外部に対して、名前付きパイプを公開しており、こちらにコマンドを書き込むことによって、子プロセスより環境を変更することができます。

使い方ですが、名前付きパイプのパイプ名は、環境変数 PIPE2NYAOS に格納されています。このパイプに普通コマンドラインに入力する文字列を書きこむだけで Ok です。

	例1:NYAOS のカレントディレクトリの操作
		[C:\usr\src\nyaos] echo %PIPE2NYAOS%
		\PIPE\NYAOS.1574
		[C:\usr\src\nyaos] copy con \PIPE\NYAOS.1574
		cd ..
		^Z
		[C:\usr\src] _

	例2:NYAOS の環境変数の操作
		[C:\] echo %hogehoge%

		[C:\] copy con %PIPE2NYAOS%
		set hogehoge=uhauha
		^Z
		[C:\] echo %hogehoge%
		uhauha
		[C:\] _

	例3:パッケージに同梱した writer.cc を参照ください。

パイプのバッファは 512 bytes しか確保していませんので、あまり大量に書き込むとデッドロックに陥ります。使用はほどほどにしてください。

■■■■ 9.製作動機 ■■■■

このプログラムを開発するまで、自分は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 としました。(でも、将来的には名前を変えるかも...)

これからの展望としては

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

■■■■ 10.制限事項 ■■■■

■■■■ 11.最後に ■■■■

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

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

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

NYAOS の最新版は

http://hp.vector.co.jp/authors/VA009797/warp/nyaos.html
より入手可能です。

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

   金島 岳  さん、宇野 篤也さん、山田 秀雄さん、奥西 藤和さん、
   吉田 孝一さん、松尾 浩  さん、我那覇 誠さん、赤木 有一さん、
   近藤 弘康さん、羽生 匡之さん、清水 洋  さん、相澤 邦彦さん、
   さとうひろもとさん、品野 竜太さん、大島 幸一さん、上野 博さん、
   我澤 賢之さん、松村 興さん、山野@NELさん、大久保 均さん、
   崎濱 たつひでさん、橋本 出さん、Altair☆さん、畠山 明さん、
   Kai Eversさん、吉田かつひささん、織華さん、葛原 賢二さん、
   今井 優さん、Chris Hellwigさん、小林 敬太郎さん、FRIES さん、
   中山 靖さん、Jeff R. さん、中川 貴之さん、たが まさひろさん、
   大黒 義裕さん、 そして Sukisuki-OS/2 Mailing List の皆様方
に、この場を借りてお礼申し上げます。ありがとうございました。