Skip to content

Instantly share code, notes, and snippets.

@emasaka
Last active March 16, 2018 03:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emasaka/9265463 to your computer and use it in GitHub Desktop.
Save emasaka/9265463 to your computer and use it in GitHub Desktop.
bash 4.3のNEWSの私訳
これはbash-4.2のリリース以降bash-4.3に追加された新機能の簡潔な説明です。
いつもどおり、完全な説明を探している場合はマニュアルページ (doc/bash.1)
が適切です。
1. Bashの新機能
a. 補完の動作の`helptopic'は、シェル組み込みコマンドだけでなくすべての
ヘルプのトピックに対応します。
b. 組み込みコマンド`help'で、最初に前方一致が行われることはなくなりま
した。そのため、`help read'は`readonly'にはマッチしません。完全一致
が該当しないときは、前方一致が行われます。
c. シェルのコンパイル時に、プロセスがSIGTERMで終了したときにメッセージ
を表示しないよう指定できるようになりました。
d. 対話型でないシェルも、checkwinsizeの設定に対応するようになりました。
フォアグラウンドのジョブが終了した後にLINESとCOLUMNSを設定します
e. シェルのオプションに新しく`globasciiranges'が追加されました。オンに
設定すると、パターンマッチにおける範囲比較で文字の順序がロケール
`C'のときと同じになります。
f. シェルのオプションに新しく`direxpand'が追加されました。ファイル名の
比較において、ディレクトリ名に含まれる変数の展開をbash-4.1と同じ挙
動にします。
g. POSIXモードでは、組み込みコマンド`command'は、代入が組み込みコマン
ド(訳注:declareやexportなど)の背後にあっても、組み込みコマンドで
あるかどうかの判定には影響しません
h. 組み込みコマンド`return'と`exit'に負の引数を与えられるようになりま
した。
i. 単語補完のコードは、ファイル名がディレクトリ名に展開されるシェル変
数を含んでいるかどうかをチェックし、必要に応じて末尾に`/'を付けます。
同じコードは、コマンドの補完のときにコマンド名に含まれるシェル変数
を展開します。
j. POSIXモードにおいて、POSIX 規格が定める特別な組み込みコマンドと同じ
名前のシェル関数を定義しようとするのは、エラーとなりました。
k. コンパイル時に厳格なPOSIX適合を指定すると、履歴展開はデフォルトで無
効になります。
l. ダブルクォートで囲まれた文字列で、閉じるダブルクォートが直後に来る
履歴展開文字 (!) は展開されません。
m. `complete'とその兄弟であるcompgen/compoptには、新しく補完のクォート
を禁止する`-o noquote'オプションが追加されました。
n. HISTSIZEにゼロ未満の値を設定すると、履歴リストの数の制限はなくなり
ます (0を設定すると、履歴リストを無効にします)。
o. HISTFILESIZEにゼロ未満の値を設定すると、履歴ファイルのサイズの制限
はなくなります (0を設定すると、履歴ファイルはサイズ0に切り詰められ
ます)。
p. 組み込みコマンド`read'は、入力されたNUL文字をスキップします。
q. `bind -X'オプションが追加されました。Unixコマンドに割り当てられたキー
シーケンスをすべて表示します。
r. POSIXモードにおいて、`read'はトラップされたシグナルにより中断します。
トラップの処理の後で、readは128+シグナル番号を返却し、途中まで読み
込まれた入力を捨てます。
s. コマンド補完のコードは、補完するコマンド名の単語の前にある空白や代
入文を無視します。
t. ビルドのときに現在のコンパイルオプションをより反映したヘルプファイ
ルを分離して作る機能が用意されました。
u. testにファイルのタイムスタンプをナノ秒単位で比較する-ntとotオプショ
ンが入りました。
v. 対話的なシェルだけでなくどのシェルもHISFILEが設定されるとコマンド履
歴を保存します。
w. `nameref' (名前参照) 変数が使えます。declareとunsetには新しくこれを
扱う-n(/+n)オプションが用意され、調べるための`test -R'オプションも
用意されています。
x. インデックスによる配列で、要素の代入や参照、削除に負の添字が使える
ようになりました (a[-1]=2, echo ${a[-1]})。配列の末尾の要素から逆に
数えます。
y. リダイレクトの{x}<word機能では、{array[ind]}のような単語が指定でき、
シェルの特別な意味を持った変数 (例:BASH_XTRACEFD) も使えるようにな
りました。
z. 特別な変数に新しくCHILD_MAXが加わりました。終了した子プロセスの終了
ステータスをシェルが覚えておく数を制御します。
aa. コンフィギュレーションに新オプション (--enable-direxpand-default)
が加わりました。シェルオプション`direxpand'をデフォルトで有効にしま
す。
bb. bashは、{x}<fooのXで割り当てられたファイル・ディスクリプターがその
ブロックが終了してもオープンされたままであることを確認するための特
別なことは何もしません。
cc. 組み込みコマンド`wait'には、次の子プロセスの状態の変化を待つ`-n'オ
プションが加わりました。
dd. `printf'のフォーマット指定で%(...)Tは引数が指定されない場合は現在時
刻を使うようになりました。
ee. そのシェルの互換性のレベルを制御する変数BASH_COMPATが加わりました。
ff. 組み込みコマンド`popd'は、余分な引数が付いているとエラーとするよう
になりました。
gg. ブレース展開のコードは、シーケンス式の展開に失敗すると単純な文字列
として扱い、単語の残りの部分のブレースの項を展開を続けます。
hh. シェルはプロセス置換を実行するときにEXITのトラップを実行できるよう
になりました。
ii. 組み込みコマンドfcは、-0を現在のコマンドラインと解釈します。
jj. シェル変数を含むディレクトリ名を補完するときに、結果がディレクリ名
であれば末尾にスラッシュを付けるようになりました。
kk. `cd'に`-@'オプションが加わりました。O_XATTRをサポートするシステムで、
ファイルの拡張属性を見ます。
ll. test/[/[[の`-v variable'演算子には、配列の参照も使えるようになりま
した。
2. Readlineの新機能
a. Readlineは、端末から入力を読んでいるときや単語を補完しているときに、
SIGHUPやその他の致命的なシグナルに以前より反応します。ただし、シグ
ナルハンドラのコンテキストでで許されていない関数は、もはや実行しよ
うとしません。
b. その行の先頭からポイントの間の文字列を履歴から検索するコマンドを割
り当てられるようになりました (history-substring-search-forward,
history-substring-search-backward)。
c. `set'で値を設定するときに、クォートした文字列を指定できるようになり
ました。副作用として、文字列の変数の値を設定するときに、続く空白や
タブは無視されます
d. 履歴のライブラリは、履歴ファイルを書き込むときにバックアップを作成
し、書き込みエラーが起きたときに元に戻します。
e. アプリケーションから設定できる新しい変数: rl_filename_stat_hook。
stat(2)を呼ぶ前に、そのファイル名を引数にして呼ばれる関数です。
Bashはこれを、$HOME/Downloadsにスラッシュを付けるようなシェル変数の
展開に使います
f. 割り当てられる関数`print-last-kbd-macro'が加わりました。最も最近定
義されたキーボードマクロを、再利用可能な形式で出力します。
g. ユーザーが設定できる変数`colored-stats'が加わりました。補完候補を表
示するときにファイルの種類をテキストの色で表せるようになります
(visible-statsを色にしたようなものです)。
h. ユーザーが設定できる変数`keyseq-timout'が加わりました。入力やインク
リメンタル検索を読むときの文字と文字の間のタイムアウトとなります。
i. アプリケーションから呼び出せる新しい関数: rl_clear_history。ストを
履歴リクリアし、readlineに関連づけられた内部データをすべて取り除き
ます。
j. ユーザーが設定できる変数show-mode-in-promptが加わりました。プロンプ
トの前に現在の編集モードを示す文字列を付け加えます。
k. アプリケーションから設定できる新しい変数: rl_input_available_hook。
readlineが入力のファイル・ディスクリプターにデータがあるかどうか検
出するために呼ばれる関数です。
l. Readlineは、入力を読んでいる間にシグナルを受け取ったときに、アプリ
ケーションが設定するイベントのフック (rl_event_hook) を呼び出します
(readは-1/EINTRを返しますがreadlineはすぐにはシグナルを処理しませ
ん)。これにより、アプリケーションがシグナルを処理するか気付くかでき
るようになります。
m. ユーザーが設定できる変数`history-size'に0未満の数が設定されると、履
歴のサイズは無制限になります。
n. アプリケーションから設定できる新しい変数: rl_signal_event_hook。
readlineが端末からの入力を読んでいてread(2)がシグナルで中断したとき
に呼ばれる関数です。現在のところ、SIGHUPやSIGTERMでは呼ばれません。
o. rl_change_environment: Readlineが環境変数を変更するかどうかを制御す
る、アプリケーションから設定できる新しい変数 (現在のところreadline
はLINESとCOLUMNSだけを変更します)。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment