Skip to content

説明書 §8 その他

Koichi Murase edited this page Mar 29, 2024 · 35 revisions

[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他]

8. その他

8.1 ble.sh の公開変数

8.1.1 シェル変数 BLE_VERSION

現在ロードされている ble.sh のバージョンを表す文字列が代入されます。

8.1.2 シェル変数 BLE_VERSINFO (配列)

現在ロードされている ble.sh のバージョン情報を含む配列を保持します。 ${BLE_VERSINFO[0]} から ${BLE_VERSINFO[2]} には、メジャーバージョン番号、マイナーバージョン番号、パッチレベルが格納されます。 ${BLE_VERSINFO[3]} には git のコミットIDが格納されます。 ${BLE_VERSINFO[4]} にはリリースステータス (alpha, beta, または release) が格納されます。 ${BLE_VERSINFO[5]} には noarch という値が格納されます (ble.sh は特定のシステムに依存せずにお使いいただけます)。

8.1.3 シェル変数 BLE_VER

現在ロードされている ble.sh のバージョンを一つの整数で表したものです。 値は ((BLE_VERSINFO[0] * 10000 + BLE_VERSINFO[1] * 100 + BLE_VERSINFO[2])) によって計算されます。

8.1.4 シェル変数 BLE_ONLOAD (配列) (v0.4)

ble.sh がロードされた時に実行するコマンドを指定する配列です。 他のシェルプラグインが、自身よりも後に ble.sh がロードされた時に追加の初期化を実行する為に使うことができます。

8.1.5 シェル変数 BLE_ATTACHED (v0.4)

現在 ble.sh がセッションにアタッチしているかどうかを表す変数です。 アタッチしている時は非空文字列が設定されます。 アタッチしていない時は空文字列が設定されます。

8.1.6 シェル変数 BLE_SESSION_ID (環境変数) (v0.4)

現在のセッションを特定する ID を保持します。ID は (Unix時間によるセッション開始時刻)/(Bash のプロセスID) の形をしています。

8.1.7 シェル変数 BLE_COMMAND_ID (v0.4)

現在のユーザーコマンドの番号を保持します。

8.1.8 シェル変数 BLE_PIPESTATUS (v0.4)

前回のユーザーコマンドの PIPESTATUS の値を保持します。

8.2 ble.sh の公開関数

8.2.1 関数 ble-import

ble-import [-dfq|--delay|--force|--query] [--] [SCRIPTFILE...]

ファイル SCRIPTFILE を既定の場所から検索し、読み込み済みでなければ source します。 オプション -d または --delay を指定した時、可能であれば遅延読み込みを行います。

指定されたファイルの内一つ以上が見つからない時、キャンセルされどのファイルも読み込まれません。 ただしオプション -f または --force が指定されている時、存在しないファイルはエラーメッセージもなく単に無視され、存在するファイルだけが読み込まれます。

ファイルの指定なくオプション -q または --query が指定された時、既に読み込まれたファイルの一覧を出力します。 一つ以上のファイルと共にオプション -q または --query が指定された時、指定されたファイルが全て読み込み済みか検査し結果を終了ステータスで返します: 一つ以上のファイルが見つからない時に 127、一つ以上のファイルが未だ読み込まれていない時に 1、それ以外の時に 0 を返します。

8.2.2 設定変数 import_path (コロン区切りディレクトリ名) (v0.4)

# 既定値
bleopt import_path="${XDG_DATA_HOME:-$HOME/.local/share}/blesh/local"

コロン区切りで ble-import のカスタム検索パスを設定します。

8.2.3 関数 ble-autoload

指定した関数 FUNCTION の遅延ロードを設定します。 関数 FUNCTION が初回に呼び出された時に SCRIPTFILEble-import します。 SCRIPTFILE には FUNCTION の定義が含まれている必要があります。

ble-autoload SCRIPTFILE FUNCTION...

8.2.4 関数 ble-stackdump

デバグ用の関数です。現在のシェル関数のコールスタックの情報を出力します。 shopt -s extdebug が設定されている時、各関数呼び出しに使用された引数も出力します。

ble-stackdump MESSAGE

8.2.5 関数 ble-assert

デバグ用の関数です。COMMANDeval によって評価し、失敗した場合にはメッセージ MESSAGE と共にコールスタックの情報を出力します。

ble-assert COMMAND [MESSAGE]

8.2.6 関数 ble-append-line

この関数はコマンドラインから呼び出して次のコマンドラインに文字列を追加するのに使います。 この関数はサブシェル内部からも呼び出すことができます。

ble-append-line STRING


# 例1

$ ble-append-line 'echo hello world'
$ echo hello world # <-- 上で指定した引数がコマンドラインに自動挿入されます


# 例2

$ echo echo hello | ble-append-line $(cat)
$ echo hello

8.3 内部の動作に関係する設定変数

8.3.1 設定変数 internal_exec_type

# 既定値
bleopt internal_exec_type=gexec   # ble-0.3以降
bleopt exec_type=gexec            # ble-0.2以前

コマンドを実行する時の文脈を制御します。 値 gexec が設定されている時、グローバルな文脈でコマンドが eval で評価されます。 値 exec (ble-0.3 迄) は関数内でコマンドを実行することを指定しますが、 デバグ用に残されていた機能でありテストされていない為 ble-0.4 で廃止されました。

8.3.2 設定変数 internal_exec_int_trace (空/非空) (v0.4)

# 既定値
bleopt internal_exec_int_trace=

非空文字列が設定されている時、シェル関数の実行が SIGINT で中断された時に、 DEBUG トラップによる SIGINT の処理経過を逐次、標準エラー出力に出力します。

8.3.3 設定変数 internal_ignoreeof_trap (文字列)

# 既定値
bleopt internal_ignoreeof_trap='Use "exit" to leave the shell.' # ble-0.3以降
bleopt ignoreeof_message='Use "exit" to leave the shell.'       # ble-0.2以前

C-d が入力された時に Bash が出力するメッセージを設定します。 Bash 3 に於いて C-d がユーザによって入力された事を検知する為に使われます。

8.3.4 設定変数 internal_suppress_bash_output (空/非空)

# 既定値
bleopt internal_suppress_bash_output=1  # ble-0.3以降
bleopt suppress_bash_output=1           # ble-0.2以前

# bashrc
source ble.sh -o internal_suppress_bash_output=1   # ble-0.4以降
source ble.sh --debug-bash-output                  # ble-0.4以降 (無効化)

非空文字列が設定されている時、Bash の本来の標準出力・標準エラー出力を端末に出力しません。 空文字列が設定されている時、Bash 本来の出力を端末に繋いだまま ble.sh による編集を実現します。 Bash 本来の出力を抑制しない設定は、ちらつきの問題がある為に現在はデバグ用に残されているのみでテストされていません。 通常は非空文字列を設定して、Bash の本来の出力は明示的に抑制するようにして下さい。

8.3.5 設定変数 internal_stackdump_enabled (算術式) (v0.2)

# 既定値
bleopt internal_stackdump_enabled=0   # ble-0.3以降
bleopt stackdump_enabled=0            # ble-0.2

ble.sh で予期しない状態を検知した時に、関数呼び出し履歴を画面に出力するかどうかを制御します。 非零の値を返した時に関数呼び出し履歴が画面に出力されます。

8.3.6 設定変数 history_lazyload (空/非空)

# 既定値
bleopt history_lazyload=1

非空文字列が設定されている時、履歴の遅延読み込みが有効になります。既定で有効です。 空文字列が設定されている時は、ble-attach 時に履歴の読み込みを完了してからユーザ入力を受け付けるようになります。

8.3.7 設定変数 idle_interval (算術式) (v0.3)

# 既定値
bleopt idle_interval='ble_util_idle_elapsed>600000?500:(ble_util_idle_elapsed>60000?200:(ble_util_idle_elapsed>5000?100:20))'

新しいユーザ入力が来ていないか確認する間隔を算術式で指定します。 変数 ble_util_idle_elapsed には最後にユーザ入力があってから経過した時間がミリ秒を単位として設定されています。 ユーザ入力がない時 (アイドル時) に裏で処理を実行する機能に於いて、ポーリングを実行する際に使われます。

8.3.8 設定変数 openat_base (整数)

# 既定値
bleopt_openat_base=30

# bashrc
source ble.sh -o openat_base=50   # ble-0.4以降

この設定変数は ble.shsource する前に設定しておく必要があります。 従って、bleopt コマンドは使用せず、直接シェル変数 bleopt_openat_base に値を指定します。 この設定は ble.sh の動作の為に Bash 4.0 以下で内部使用するファイルディスクリプターの番号の起点を指定します。 この変数に設定された値を最初の内部ファイルディスクリプターとし、 以降1ずつ増やした値を内部ファイルディスクリプターとして使用します。 既定値 30 及び 31, 32 などを別の目的で使用したい場合に、この変数に他の用途と被らない領域の値を設定して下さい。

8.3.9 設定変数 connect_tty (空/非空/列挙) (v0.4)

# 既定値
bleopt connect_tty=1

非空文字列が設定されている時、子 Bash 対話セッションの ble.sh は、 開始時の標準入出力が TTY に繋がっていなかったとしても現在の制御端末 /dev/tty に接続して 行編集ユーザーインターフェイスを提供します。 この場合でも、ユーザーコマンドの標準入出力は開始時の標準入出力になります。 値として inherit が設定されている時、子 ble.sh セッションが TTY を見つけられない時の為に、追加で TTY をエクスポートします。 但し、この設定では、セッション内でバックグランドプロセスが開始された時に、センション終了後も端末のウィンドウが自動で閉じない可能性があります。 この設定は現在のセッションの振る舞いには影響を与えません。

8.3.10 設定変数 syntax_debug (空/非空)

# 既定値
bleopt syntax_debug=

この設定変数に非空文字列が設定されている時、内部の構文解析情報及び構文木を表示します。 release バージョンでは無視されます。

8.3.11 設定変数 debug_xtrace (空/ファイル名) (v0.4)

# 既定値
bleopt debug_xtrace=

この設定変数にファイル名が指定されている時、 ble.sh 内部の処理に対する xtrace (set -x) ログを指定したファイル名に書き込みます。

8.3.12 設定変数 debug_xtrace_ps4 (プロンプト文字列) (v0.4)

# 既定値
bleopt debug_xtrace_ps4='+ '

この設定は bleopt debug_xtrace による xtrace で使用する PS4 の値を指定します。

8.3.13 設定変数 debug_idle (空/非空) (v0.4)

# 既定値
bleopt debug_idle=

非空文字列が指定されている時、現在実行中のバックグラウンドタスクを info パネルに表示します。

8.4 ble.sh における制限

ble.sh では既存の .inputrc や組み込みコマンド bind によるユーザ設定を上書きします。 ble.sh はロード時に .inputrc を読み取り、 また組み込みコマンド bind を関数で上書きする事によってユーザ設定を ble-bind 設定に翻訳しますが、 ble.shsource する前の組み込みコマンド bind による設定は現在では反映されません。 .inputrc では ble.sh だけに適用する設定を以下の様に記述できます。

# inputrc

$if Blesh

# ble.sh 使用時の設定

$endif

ble.sh では内部的に以下の trap を使用しています。 ble-0.4 以降では trap コマンドを上書きする事により、 ユーザ側でこれらを意識することなく trap を設定することができるようになりました。 但し builtin trap の代わりに trap または ble/builtin/trap を使ってユーザ設定を行う必要があります。

# ble-0.4
builtin trap -- 'ble/builtin/trap/.handler 0 "$BASH_COMMAND" "$@"; builtin eval -- "${_ble_builtin_trap_postproc[0]}" \# "${_ble_builtin_trap_lastarg[0]}"' EXIT
builtin trap -- 'ble/builtin/trap/.handler 2 "$BASH_COMMAND" "$@"; builtin eval -- "${_ble_builtin_trap_postproc[2]}" \# "${_ble_builtin_trap_lastarg[2]}"' INT
builtin trap -- 'ble/builtin/trap/.handler 28 "$BASH_COMMAND" "$@"; builtin eval -- "${_ble_builtin_trap_postproc[28]}" \# "${_ble_builtin_trap_lastarg[28]}"' WINCH
builtin trap -- 'ble/builtin/trap/.handler 1000 "$BASH_COMMAND" "$@"; builtin eval -- "${_ble_builtin_trap_postproc[1000]}" \# "${_ble_builtin_trap_lastarg[1000]}"' DEBUG
# Bash 3.2以下
builtin trap -- 'ble/builtin/trap/.handler 10 "$BASH_COMMAND" "$@"; builtin eval -- "${_ble_builtin_trap_postproc[10]}" \# "${_ble_builtin_trap_lastarg[10]}"' USR1

# ble-0.3
builtin trap -- 'ble-edit/exec:gexec/.eval-TRAPINT' INT
builtin trap -- 'ble/base/unload' EXIT
builtin trap -- 'ble-edit/attach/TRAPWINCH' WINCH
# Bash 3.2以下
builtin trap -- 'ble-edit/bind/stdout/TRAPUSR1' USR1

# 現在未使用
# builtin trap -- 'ble-edit/bind/.exit-TRAPRTMAX' RTMAX

ble.sh では bleopt_openat_base で指定した番号以降の(数個の)ファイルディスクリプタを内部で使用します。 これらのファイルディスクリプタを exec を用いてユーザ側で変更しないで下さい。

ble.sh では以下の組み込みコマンド・予約語を関数またはエイリアスで上書きする事を禁止しています。 ユーザの入力したコマンドによって上書きされてもその上書きは解除されます。

  • 組み込みコマンド: builtin enable unalias return break continue declare typeset local eval :
  • 予約語: if then elif else case esac while until for select do done { } [[ function

ble.sh は組み込みコマンド unset を内部で builtin unset を明示的に呼び出す読み取り専用の関数で上書きします。ユーザはこの関数を上書きできません。


[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他]

Clone this wiki locally