Yash: yet another shell
=======================


Yash は Magicant が個人的に開発しているコマンドラインシェルの
実装です。
POSIX.1 (IEEE Std 1003.1, 2008 Edition) に(ほぼ)準拠しています。


Yash は GPL の元で配布されるフリーソフトウェアです。詳細は
COPYING ファイルを参照してください。

Yash をビルドしインストールする方法は INSTALL.ja ファイルを参照
してください。


===== 注意事項 =====

 * C 言語では、ナル文字は文字列の終わりを表します。そのため、入力
   したファイルの内容や文字列にナル文字が含まれているとそれ以降の
   部分が正しく処理されなくなってしまいます。
 * 符号付き整数の演算・型変換においてオーバーフローが発生した
   場合でもエラーにならずに (処理系定義の) 何らかの整数値が返される
   ことを仮定しています。
 * ソース内の随所で GCC の拡張機能である __attribute__ キーワードを
   使用しています。GCC 以外の環境ではプリプロセッサによって
   消去するようにしていますが、__attribute__ 識別子を他の用途で
   使用している処理系ではコンパイルに支障をきたすかもしれません。
   他にもいくつか '_' で始まる識別子を使用しているため、
   非常に特殊な環境では正しくコンパイルできないかもしれません。
 * いくつかのシグナルは特定の番号を持っていると仮定しています:
     SIGHUP=1 SIGINT=2 SIGQUIT=3 SIGABRT=6
     SIGKILL=9 SIGALRM=14 SIGTERM=15
 * ファイルアクセス権フラグは特定の値を持っていると仮定しています:
     0400=user read    0200=user write   0100=user execute
     0040=group read   0020=group write  0010=group execute
     0004=other read   0002=other write  0001=other execute
 * POSIX ロケール以外のロケールでの文字クラスの分類は POSIX ロケール
   での分類と上位互換であると仮定しています。
 * -e (-o errexit) オプションが有効な時、and/or リストの最後の
   コマンドがエラーを返すとシェルは終了します。この挙動は厳密には
   POSIX に従っていませんが、他の既存のシェルの挙動に合わせて
   このようにしています。
 * nolog オプションには対応していません。(無視されます)
 * POSIX によると、PS1 変数の値はパラメータ展開されることになって
   います。Yash ではさらに PS1 変数の値に対してコマンド置換と
   数式展開も行います。これは実装上の都合によるものです。
 * 改行を含むエイリアスには対応していません。


======================
Magicant <magicant.starmen@nifty.com>
