MySQL Shell 8.0  /  MySQL Shell コードの実行  /  コード履歴

このページは機械翻訳したものです。

5.5 コード履歴

MySQL Shell で発行するコードは履歴に格納され、上下の矢印キーを使用してアクセスできます。 増分履歴検索機能を使用して履歴を検索することもできます。 履歴を検索するには、Ctrl+R を使用して逆方向に検索するか、Ctrl+S を使用して履歴を順方向に検索します。 検索がアクティブになったら、文字を入力すると、履歴内で一致する文字列が検索され、最初の一致が表示されます。 Ctrl+S または Ctrl+R を使用して、現在の検索語にさらに一致するものを検索します。 さらに文字を入力すると、検索がさらに絞り込まれます。 検索中に矢印キーを押すと、現在の検索結果から履歴をステップ実行できます。 Enter を押して、表示された一致を受け入れます。 Ctrl+C を使用して検索を取り消します。

history.maxSize MySQL Shell 構成オプションでは、履歴に格納するエントリの最大数を設定します。 デフォルトは 1000 です。 履歴エントリの数が構成されている最大数を超えると、最も古いエントリが削除されて破棄されます。 最大値を 0 に設定すると、履歴エントリは格納されません。

デフォルトでは、履歴はセッション間で保存されないため、MySQL Shell を終了すると、現在のセッション中に発行した履歴は失われます。 MySQL Shell history.autoSave オプションを有効にすると、セッション間の履歴を保存できます。 たとえば、この変更を永続的にするには、次のコマンドを発行します:

mysqlsh-js> \option --persist history.autoSave=1

history.autoSave オプションを有効にすると、履歴は MySQL Shell 構成パス (Linux および macOS の場合は ~/.mysqlsh ディレクトリ、Windows の場合は %AppData%\MySQL\mysqlsh フォルダ) に格納されます。 このパスは、環境変数 MYSQLSH_USER_CONFIG_HOME を定義することで、すべてのプラットフォームでオーバーライドできます。 保存された履歴は MySQL Shell によって自動的に作成され、所有者ユーザーのみが読み取ることができます。 履歴ファイルの読取りまたは書込みができない場合、MySQL Shell はエラーメッセージをログに記録し、読取りまたは書込み操作をスキップします。 8.0.16 より前のバージョンでは、履歴エントリは、すべての MySQL Shell 言語で発行されたコードを含む単一の history ファイルに保存されていました。 MySQL Shell バージョン 8.0.16 以降では、履歴はアクティブな言語ごとに分割され、ファイルの名前は history.sqlhistory.js および history.py になります。

MySQL Shell \history コマンドを発行すると、\history delete entry_number コマンドで使用できる履歴エントリ番号とともに、発行された順序で履歴エントリが表示されます。 個々の履歴エントリ、指定した数値範囲の履歴エントリまたは履歴の末尾を手動で削除できます。\history clear を使用して、履歴全体を手動で削除することもできます。MySQL Shell を終了すると、history.autoSave 構成オプションが true に設定されている場合、履歴ファイルに残っている履歴エントリが保存され、その番号付けは 1 から始まるようにリセットされます。 shell.options["history.autoSave"]構成オプションが false(デフォルト) に設定されている場合、履歴ファイルはクリアされます。

MySQL Shell プロンプトで対話形式で入力したコードのみが履歴に追加されます。 間接的または内部的に実行されるコード (\source コマンドの実行時など) は、履歴に追加されません。 複数行コードを発行すると、履歴エントリ内の改行文字が削除されます。 同じコードが複数回発行された場合は、履歴に一度のみ格納されるため、重複が削減されます。

--histignore コマンドオプションを使用して、履歴に追加されるエントリをカスタマイズできます。 また、MySQL Shell を SQL モードで使用する場合は、履歴に追加しない文字列を構成できます。 この履歴無視リストは、\sql コマンドをクエリーとともに使用して、別の言語がアクティブなときに単一の SQL ステートメントを実行する場合にも適用されます。

デフォルトでは、IDENTIFIED または PASSWORD の glob パターンに一致する文字列は履歴に追加されません。 一致する文字列をさらに構成するには、--histignore コマンドオプションまたは shell.options["history.sql.ignorePattern"]を使用します。 コロン (:) で区切って、複数の文字列を指定できます。 履歴照合では、大/小文字を区別しない glob パターン (照合など) が使用されます。 サポートされているワイルドカードは、* (0 文字以上に一致) および ? (1 文字に完全に一致) です。 デフォルトの文字列は"*IDENTIFIED*:*PASSWORD*"として指定されます。

履歴無視リストに設定されているフィルタに関係なく、最後に実行されたステートメントは常に上向き矢印を押してリコールできるため、すべての入力を再入力せずに修正できます。 フィルタリングが最後に実行されたステートメントに適用される場合、別のステートメントが入力されるとすぐに、またはステートメントの実行直後に MySQL Shell を終了すると、そのステートメントは履歴から削除されます。