Yash 更新履歴 凡例: +: 新機能 -: 廃止機能 =: 仕様変更 *: バグ修正 x: 新たに加わってしまったバグ ---------------------------------------------------------------------- Yash 2.30 * リダイレクトのファイル名補完を修正 ---------------------------------------------------------------------- Yash 2.29 + エイリアスの値に改行を入れられるようになった * 空の配列を "typeset" 組込みで表示しようとしたときに不正メモリ アクセスしていた * 関数の中身が (...) の形式の複合コマンドとして定義されているとき コマンドを正しくサブシェルで実行するように * 行編集で、undo コマンドは編集中の履歴項目でのみ使えるようにした ---------------------------------------------------------------------- Yash 2.28 = 対話シェルで、メールチェックはジョブ変化の報告の前に行うように なった * 数式展開で、評価すべからざる式を評価していることがあった * "array" 組込みで、-d オプション使用時に正と負のインデックスを混ぜ ると誤った要素を削除していた * 実行するコマンドが見付からなかったとき誤って EXIT トラップを実行 していた * 最後のコマンドがリダイレクトされていたとき EXIT トラップもそのリ ダイレクトで実行されてしまうことがあった * 配列の代入を伴う "exec" 組込みで配列の値を正しく export するよう にした * ${#@} が配列の要素の長さの配列に正しく展開されていなかった * 整数列へのブレース展開で無限ループすることがあった ---------------------------------------------------------------------- Yash 2.27 * 細かいバグ修正 ---------------------------------------------------------------------- Yash 2.26 + "return" 組込みの新しいオプション: -n (--no-return) = 英語のエラーメッセージを書き直した = シェルオプションの名前の扱いを一般化した . オプション名の大文字・小文字を区別しなくなった . オプション名に含まれる英数字以外の文字を無視するようにした . オプション名に "no" を付けることで有効・無効を逆転できるように した = POSIX 準拠モードでは "case foo in (esac) bar; esac" をエラーに するようになった = 対話シェルでは noexec オプションを無視するようになった = 新着メール通知はメールボックスファイルが空のときは表示しないよう にした = "printf %c ''" は "printf %c" と同様に何も出力しなくなった = "complete" 組込みを -A または -R オプション付きで呼び出した場合、 -f オプションで生成されるファイル名候補についてはディレクトリ名 部分を除いてパターンマッチングを行うように * '=' を含む関数名を typeset および unset 組込みに指定できるように した。(-f オプション指定時) * SIGINT で中断された反復実行の終了ステータスを修正 ---------------------------------------------------------------------- Yash 2.25 = 補完候補リストにおいてオプションは大文字小文字区別無くまとめる ようにした = 補完関数を実行中は $IFS 変数の値をデフォルトに戻すように ---------------------------------------------------------------------- Yash 2.24 + "." 組込みの新しいオプション: -L + "command" 組込みの新しいオプション: -a, -f, -k - "command" 組込みの廃止されたオプション: -B = FreeBSD で全ての種類のシグナルが扱えるように configure を修正 = 新しい補完メカニズム ("complete" 組込みの動作を変更。補完設定の $YASH_LOADPATH からの自動読み込み) = 補完候補リストで短いオプションが長いオプションの前に来るように 並び順を変更 * 存在しないファイルへのシンボリックリンクを正しく補完できるように * 補完機能のその他の修正 * リダイレクト内のパラメータ展開がエラーになったときに不正メモリ アクセスしていた ---------------------------------------------------------------------- Yash 2.23 * コマンドライン補完の途中ではトラップを実行しないようにした (予期せぬコマンドの実行により表示が乱れるのを防ぐため) * "-o notify" オプションが有効な時、候補生成関数を使用した補完の 最中にジョブの状態を出力しようとして不正メモリアクセスしていた * "-o verbose" オプションが有効な時でも、補完設定の自動読み込み時は 読み込んだ内容を出力しないようにした ---------------------------------------------------------------------- Yash 2.22 + "test" 組込みの演算子追加: -G, -O, -N + $YASH_COMPPATH からの補完設定の自動読み込み * サブシェルが生成された直後にシグナルを受信したとき誤ってそれを 無視していたのを修正 * その他のバグ修正 ---------------------------------------------------------------------- Yash 2.21 + 行編集での補完機能 = 対話シェルでは、それぞれのコマンドごとに $LINENO を 1 にリセット するようにした * "function" キーワードが "command -v" で認識されていなかった * 対話シェルが SIGINT を受け取った後の復旧処理を修正 * シェルへの入力を扱う関数を書き直し (いくつかのバグ修正含む) ---------------------------------------------------------------------- Yash 2.20 + "function" キーワードによる関数の定義 = "test" 組込みの "-nt", "-ot" 演算子による比較では存在しない ファイルをより古いとみなすようになった (Korn shell に倣う) = 行編集: いくつかの編集コマンドの名前を変更 vi-change-all -> vi-change-line vi-yank-and-change-all -> vi-yank-all-change-line vi-append-end -> vi-append-to-eol * 行編集: clear-and-redraw-all コマンドが正しく動いていなかった ---------------------------------------------------------------------- Yash 2.19 + FreeBSD でも "ulimit" 組込みが使えるようになった + メールチェックで、可能ならナノ秒単位でメールファイルをチェック するようにした + 行編集: 新しいコマンドの追加: oldest-history-bol, newest-history-bol, return-history-bol, prev-history-bol, next-history-bol, beginning-search-forward, beginning-search-backward = ファイル名パターンマッチングを高速化 = 行編集: 履歴検索中の accept-line コマンドは、検索結果が見つから ないときは失敗するようになった = 行編集: 以下のコマンドはカーソルを行頭に移動しないようになった oldest-history, newest-history, return-history, prev-history, next-history カーソルを行頭に移動する古い挙動は、名前が "-bol" で終わる 新しいコマンドによって得られる * 配列の代入のトレースの出力がおかしかったのを修正 * 行編集: vi-edit-and-accept コマンドでカウントを指定できるように * 行編集: emacs モードでの search-again-forward/backward コマンドの 後のカーソル位置を修正 ---------------------------------------------------------------------- Yash 2.18 + "test" 組込み: 文字列比較演算子追加 (==, ===, !==, <, <=, >, >=) + "test" 組込み: -nt, -ot 演算子で可能ならナノ秒単位でファイルの 更新日時を比較するように + "cd", "pushd" 組込みに --default-directory オプション追加 + "pushd" 組込みに --remove-duplicates オプション追加 + 右プロンプトとスタイラープロンプト + --le-alwaysrp オプション = $PS1 と $PS2 のフォント変更用エスケープシーケンスの解釈を変更 = $PS3 をデフォルトで初期化しないように = $PS4 でも $PS1/$PS2 と同様にエスケープシーケンスを解釈するように = "echo"/"printf" 組込みでナル文字を出力できるように * 行編集: $LINES と $COLUMNS が無視される場合があった * 行編集: いくつかの端末での文字の色を修正 ---------------------------------------------------------------------- Yash 2.17 + --le-visiblebell オプション + "test" 組込み: バージョン比較演算子 (-veq, -vne, -vgt, -vge, -vlt, -vle) + 行編集: "eof" コマンド = "typeset" 組込みをオペランドなしで実行したとき、-g オプションが なければローカル変数のみ表示するように = "typeset" 組込みで関数を表示させるときの出力を整形 = POSIX 準拠モードでないときは、コマンド置換やコマンドリダイレクト の中のコマンドもあらかじめ先に解析しておくようになった * パラメータ展開 "${#}" が構文エラーになっていた * サブシェルで "wait" 組込みを実行すると誤って親プロセスでない プロセスを待とうとすることがあった * 行編集の vi-replace-char コマンドが壊れていた * その他様々なバグ修正 ---------------------------------------------------------------------- Yash 2.16 + --curbg と --curstop オプション = --curasync オプションはデフォルトでオンに = 空の while/until ループの終了ステータスを変更 = "return" および "exit" 組込みで 256 以上の終了ステータスを使える ように = "echo" 組込みの八進数エスケープは \0 で始まるものしか解釈しない ように * 非対話シェルで "command" 組込みで特殊組込みを実行したとき構文 エラーになるとシェルが終了してしまっていたのを修正。 * EXIT トラップ設定時のシェルの終了ステータスを修正 * "read" と "getopts" 組込みで --allexport オプションが利いて いなかった * "getopts" 組込みのセグメンテーションフォルトその他エラー修正 * 行編集の vi-replace-char コマンドが不正メモリアクセスを 引き起こすことがあった * 行編集の emacs-just-one-space コマンドの結果がおかしかった ---------------------------------------------------------------------- Yash 2.15 + 対話シェルのコマンドを SIGINT で中断できるように + パス名展開でのブラケット記法に完全に対応した (libc の正規表現の 実装に依存) = シェルがセッションリーダーのとき "suspend" 組込みでサスペンドする には -f オプションを付けないといけないようにした = $YASH_LE_TIMEOUT 変数をデフォルトで設定するのをやめた = ジョブ制御有効なシェルがバックグラウンドで起動されたら停止する ように = ジョブ制御有効なシェルはデフォルトでは SIGTTOU を無視しないように = --nocaseglob がオンでも "${var#xxx}" などのパラメータ展開の マッチングでは大文字小文字を区別するように * リダイレクトにおけるパス名展開を修正 * 対話シェル起動時に無視されていたシグナルを "trap" 組込みで デフォルトのシグナルハンドラに変更できなかった * 組込みコマンドが誤ってシグナルに割り込まれるのを修正 * エイリアス置換の後に複合コマンドなどが正しく解析されるよう修正 * その他様々なバグ修正 ---------------------------------------------------------------------- Yash 2.14 + "bindkey" 組込みの -l オプション + 配列のインデックスに負数を指定できるようになった = "cd /.." の後 $PWD は /.. ではなく / にするように = "command -vb" はキーワード・エイリアス・関数を表示しないように = ほとんどの組込みにおいて、標準出力への書き込みがエラーになったら メッセージを吐いて非 0 で終了するようにした = "pwd", "times" 組込みに余計な引数を与えたときエラーにするように = POSIX 準拠モードでないとき特殊組込みでの変数代入がエラーに なってもシェルを終了しないように * 作業ディレクトリが / のとき "cd //" できなかった * yashrc の中で "bindkey" コマンドを使うと不正メモリアクセスが 発生していた * $PATH にない通常の組込みコマンドが "command -vb" で検索 できなかった * "dirs" 組込みに引数を与えたとき無限ループしていた * "ulimit" 組込みが -c, -d オプションを受け付けていなかった * POSIX 準拠モードでは "fg" 組込みは最大一つしか引数を受け付けない ように (ヘルプにはそう書いてあったが、実際にはそうなって いなかったのを修正) ---------------------------------------------------------------------- Yash 2.13 + "history" 組込み + "eval", "break", "continue" 組込みの -i オプション + コマンドが見つからないとき $COMMAND_NOT_FOUND_HANDLER 変数の値を 実行するように - --autocd オプション = 対話シェルで "return" 組込みが関数外で使われた時、終了ステータス 1 を返すように = コマンドの検索・実行を修正 * $PROMPT_COMMAND が設定されているとき、停止中のジョブがあると "exit" を二回やってもシェルを終了できなかった * $PROMPT_COMMAND が設定されていると "notifyle" オプションが正しく 動作していなかった * 行編集で redo がうまく動かなくなっていた * 行編集でトラップ処理のあとコマンドラインが再描画されていなかった * 行編集で vi-edit-and-accept コマンドについていくつかのバグ修正 ---------------------------------------------------------------------- Yash 2.12 + Emacs 風行編集 + "bindkey" 組込み + $PROMPT_COMMAND は配列でもよいように + 作業ディレクトリ変更後に $YASH_AFTER_CD を実行するように = "fg", "bg" 組込みは常に SIGCONT を対象ジョブに送信するように = "fg", "bg", "disown", "wait" 組込みの後で "exit" しようとしたとき も停止中のジョブに関する警告を出すように * vi 風行編集で、30 回目の yank の後誤ったテキストが put されていた * vi 風行編集で、カーソルが行頭にあると "s" コマンドが使えなかった ---------------------------------------------------------------------- Yash 2.11 + "--histspace", "--le-noconvmeta" オプション追加 + $HISTRMDUP 変数に対応 + $YASH_LE_TIMEOUT 変数に対応 + kill 組込みの -l オプションでシグナル名をオペランドとして 渡せるように = "--le-convmeta" オプションはオンオフ型オプションに = ログインシェルでは "$-" 特殊パラメータに "l" フラグを含めるように * 空の case 文 "case i in (*) esac" は常に終了ステータス 0 を返す ように * "-f" オプション有効時、クォートされた単語に余計なバックスラッシュ がくっついていた * vi 風行編集の v コマンドで不正メモリアクセスしていたのを修正 ---------------------------------------------------------------------- Yash 2.10 + 行編集におけるコマンド履歴検索 = 内容のない行は履歴に入れないように = vi 風行編集で、"cw" と "cW" が実際の vi と同様に振る舞うように * 行編集なしで configure したとき "notifyle" オプションを設定しよう とするとセグフォが発生していた * 行編集で、編集した履歴をアンドゥしたときカーソル位置が 正しくなかった * 行編集中の不正メモリアクセスのいくつかの修正 ---------------------------------------------------------------------- Yash 2.9 + 対話モードにおける行編集機能 x 行編集の実装がまだ途中 + 同じ履歴ファイルを使用する複数のシェルのインスタンス同士で 履歴を共有するように - "history" 組込みを廃止 = 非 ASCII なアルファベットも変数名に使えるように = 入れ子のパラメータ展開は必ずブレースでくくらないといけないように = "help" 組込みで、指定したコマンドが見つからなければ エラーを出すように * 算術展開における小数演算が正しくないことがあった * 算術展開で下線で始まる識別子がエラーになっていた * "${#" で始まるパラメータ展開の解析を修正 (例: "${#=x}") * "pwd" 組込みのヘルプメッセージを修正 ---------------------------------------------------------------------- Yash 2.8 + 変化量を指定できるブレース展開: {a..b..c} + "command" 組込みで -B, -b オプションが -v, -V オプションと同時に 使えるようになった = POSIX.1-2008 に準拠 . "read" 組込みは入力の末尾の空白類を常に削除するように . チルダ展開の結果を単語分割・パス名展開しないように . "pwd -P" で $PWD 変数を更新しないように . "cd -L foo/.." は、ディレクトリ "foo" が存在しないときエラーに . "command" 組込みで -p オプションが -v, -V オプションと同時に 使えるようになった . POSIX 準拠モードでは、ジョブ制御中でも非同期コマンドはすべて SIGINT と SIGQUIT を無視するように * fc 組込みで編集したコマンドを実行する際、$? 変数に fc で起動した エディタの終了ステータスが代入されてしまっていた * $IFS の中にバックスラッシュ、コンマ、またはブレースを入れても 正しく単語分割できなかった * パス名展開において、ディレクトリの検索権限だけが必要な時でも、 読み込み権限がなければ展開に失敗していた * シェルが起動するコマンドのシグナルマスクは、シェルのマスクを 受け継ぐようにした (トラップしたシグナルのマスクを除く) * "autocd" オプション有効時 "command" 組込みにコマンドとして ディレクトリ名を与えたときの動作を修正 ---------------------------------------------------------------------- Yash 2.7 + ${array[index]:=value} で配列要素への代入が可能に + ヒアストリングのための新しいリダイレクト演算子 "<<<" + パイプを開く新しいリダイレクト演算子 ">>|" - ループパイプ機能廃止 = シェルの起動時に $IFS 変数を常にデフォルト値で初期化するように * "echo" および "printf" 組込みでエラー時にメッセージを出すように * ファイル名の先頭にあるクォートされたピリオドがファイル名展開で 正しくマッチしていなかった ---------------------------------------------------------------------- Yash 2.6 + fc 組込みに -q オプション追加 + 複合コマンドの内容は空でもよいように * "alias -p" でハイフンを適切にエスケープするように * POSIX 準拠モードの for 文で、識別子の直後のセミコロンをエラーに するように * 複合コマンドの直後でグローバルエイリアスが使えなかった * "-o notify" オプションが有効な時 "fg" および "wait" 組込みが 不正メモリアクセスを引き起こしていた ---------------------------------------------------------------------- Yash 2.5 = シェルが使用している FD のリダイレクトはエラーにするように * いくつかのリダイレクト構文エラーを見逃していた * "sig.y" テストが間違っていた * リダイレクト付きの "exec" コマンドがリダイレクト付きの { } 括弧の 中にある場合、括弧に対するリダイレクトが残ったままになっていた * for 文の識別子の直後のコメントの解析エラーを修正 ---------------------------------------------------------------------- Yash 2.4 = "jobs" 組込みの -p オプションに対応する長いオプションを --pid-only から --pgid-only に変更 * SIGCHLD, SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のトラップが 誤って無視されることがあった * SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のシグナルハンドラが 誤って解除されている瞬間があった * "wait" 組込みがシグナルに割り込まれたときの終了ステータスを修正 * ファイルアクセス権限の判定を修正 * "command -V xxx/yyy" で "xxx/yyy" が正しいコマンドでないとき エラーメッセージを出すように ---------------------------------------------------------------------- Yash 2.3 = 対話的かつ非 POSIX 準拠モードで動作時、LC_CTYPE の変更が直ちに 有効になるように * パラメータ展開で空文字列を正しく展開できていなかった * 稀にシグナルが無視される競合状態を修正 * typeset/readonly/export 組込みで代入を行うとシェル内部のデータが 正しく更新されていなかった。これにより、PATH を変更した後も古い PATH を使い続けてしまうなどの問題があった。 ---------------------------------------------------------------------- Yash 2.2 + "help", "pushd", "popd", "dirs" 組込み = ルートディレクトリから相対パスで "cd" するとき設定される $PWD の値を修正 * "." や ".." を含むファイル名展開が正しく動作していなかった ---------------------------------------------------------------------- Yash 2.1 + 配列変数 + "array", "echo", "printf", "test" 組込み + "read" 組込みの -A オプション * "${FOO:-bar}" のようなパラメータ展開の中のコロンフラグが パラメータの値が特定の文字で始まる場合に無視されていた * コマンドに対して代入するとき読み取り専用変数でも代入できて しまっていた * "unset" 組込みに変数名として "=" を渡すと誤って位置パラメータを 削除し、場合によっては不正なメモリアクセスを引き起こしていた。 * 空白のみからなる変数の値のフィールド分割が誤っていた * ファイルアクセス権限の確認は実ユーザ・グループ ID ではなく実効 ユーザ・グループ ID に基づいて行うように ---------------------------------------------------------------------- Yash 2.0 + "history" 組込み + コマンドリダイレクト * POSIX 準拠モードの非対話シェルは特殊組込みの特定のエラーで終了 するように * エイリアス置換の処理を改良 * その他のバグ修正 ---------------------------------------------------------------------- Yash 2.0 beta2 + コマンド履歴 + "type", "hash", "fc" 組込み = "command" 組込みの -V オプションでコマンドがみつからなかった場合 メッセージを出すように * $PATH に代入しながら外部コマンドを呼出すと不正なメモリアクセスが 発生していた。 * 一重引用符が正しく解析されない場合があった。 * その他のバグ修正 ---------------------------------------------------------------------- Yash 2.0 beta1 + "read", "getopts", "command" 組込み + --autocd, --curasync オプション + メールチェック機能 + プロンプトコマンド = "readonly", "export" 組込みは常にグローバルに * 標準入力をバッファリングしないようにした * "typeset" 組込みで '=' 以外の全ての文字を変数名として受け付ける ようにした * 特殊パラメータ $? が変数代入内で行われたコマンド置換の終了 ステータスを反映するように * その他様々なバグ修正 ---------------------------------------------------------------------- Yash 2.0 beta0 + "eval", "exec", ".", "times", "umask", "typeset", "export", "readonly", "unset", "shift", "trap" 組込み + "wait" 組込みを中断できるように + 数式展開 + 対話モードでプロセスがシグナルによって終了したらメッセージを 表示するように - 起動時に "/etc/profile" と "~/.profile" は読み込まないように * エイリアス置換でのトークン区切りの認識を修正 * 値のない代入でのトークン区切りの認識を修正 * その他様々なバグ修正 ---------------------------------------------------------------------- Yash 2.0 alpha2 + 起動時に /etc/profile や ~/.yashrc を読み込むように + --noprofile, --norcfile, --rcfile オプション + "pwd", "set", "exit", "return", "break", "continue", "jobs", "fg", "bg", "wait", "disown", "alias", "unalias" 組込み * --nocaseglob が -c として解釈されていた * --nocaseglob で大文字小文字の認識が不十分だった * ジョブ制御がオフなら、対話シェルでもジョブの状態変化を プロンプト前に表示しないようにした = --nounset 有効時、${i?xxx} はエラーとして xxx を返すように = ヘルプの表示を簡潔に ---------------------------------------------------------------------- Yash 2.0 alpha1 + オプション追加: -x, -h, -a = POSIX 準拠モードでは 'PS3' のデフォルト値を設定しないように + 'configure' に新しい '--no-undefined' オプション追加 + ":", "true", "false", "cd" 組込みコマンド * PATH の値が変更されるときコマンド名ハッシュをクリアするように * ナル文字が入力された時のアサーションエラー * その他様々なバグ修正 ---------------------------------------------------------------------- Yash 2.0 alpha0 (2.x 版の最初のリリース) x 数式展開が未実装 x 組込みコマンドが全く未実装