Yash: yet another shell http://yash.sourceforge.jp/ ======================= Yash は POSIX.1 (IEEE Std 1003.1, 2008 Edition) 規格に (ほぼ) 準拠して いるコマンドラインシェルです。Bash や ksh などの他のシェルよりもより厳 密に規格に準拠しています。 POSIX で定められた機能の他にも yash は以下のような機能を備えています * グローバルエイリアス * 乱数 * ソケットリダイレクト等の特殊なリダイレクト * 右プロンプト * コマンドライン補完 Yash は GNU General Public License (GPL) version 2 の元で配布されるフ リーソフトウェアです。GPL に従う限りあなたは本ソフトウェアを自由に複製 ・改変・使用・配布することができますが、一切の保証はありません。 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 に従っ ていませんが、他の既存のシェルの挙動に合わせてこのようにしています。 * -o nolog オプションには対応していません。(無視されます) * POSIX によると、PS1 変数の値はパラメータ展開されることになっていま す。Yash ではさらに PS1 変数の値に対してコマンド置換と数式展開も行 います。これは実装上の都合によるものです。 * POSIX によると、コマンド `printf %c foo' は文字列 `foo' の最初のバ イトを出力することになっています。Yash では `foo' の最初の文字を出 力するので、出力が複数バイトになることがあります。 * 改行を含むエイリアスには対応していません。 ====================== Magicant 感想・提案・バグ報告等を歓迎します。ただし、全ての提案やバグ報告に 応じることを約束するものではありません。