複数のコマンドを入力しましたが、実行したときにhistory
そのコマンドがないことがわかりました。
コマンドが(スペース)で始まる場合以外に、コマンドが履歴に書き込まれない場合は何ですか?
答え1
すでに先行スペースに言及し、他の回答ではパットについて言及しました。意図的に設定などの記録に保存されている内容を変更してHISTIGNORE
簡単に記録をオフにする。
別の状況は、同じユーザーが複数の対話型シェルを実行している場合です。 Zシェルには、share_history
複数のZシェルインスタンスが共有履歴ファイルを更新するオプションがあります。ファイルを再読み込みして新しい項目を見つけ、各項目にタイムスタンプを適用します。
Bourne Againシェルにはこれらの組み込み機能はありません。少しこれを行うときは、shenanigansを使用して印刷プロンプトでコマンドを実行します。これは、シェルが自分以外のものを履歴ファイルに書き込むことを期待せず、各コマンドラインが実行された後に履歴が更新されないという点で、デフォルトの履歴ファイルの動作を変更します。
特に、Bourne Againシェルのデフォルトの動作は、シェルが終了した場合、またはコマンドを使用して明示的に指示された場合にのみ履歴ファイルを更新しますhistory
。これは、ユーザーが複数の対話型シェルセッションを持つときに、1つのシェルが別のシェルによって作成された履歴を上書きするだけでなく、シェルが終了しない可能性があることを意味します。きれいに履歴ファイルは記録されないため、シェルの異常終了と履歴ファイルの最後の(明示的な)更新の間に発生したコマンド履歴は失われます。
追加読書
答え2
履歴は主にシェルパラメータによって制御されます。
組織管理
HISTCONTROL
これはパラメータの1つです。
内容は次のとおりですman bash
。
HISTCONTROL
A colon-separated list of values controlling how commands are
saved on the history list. If the list of values includes
ignorespace, lines which begin with a space character are not
saved in the history list. A value of ignoredups causes lines
matching the previous history entry to not be saved. A value
of ignoreboth is shorthand for ignorespace and ignoredups. A
value of erasedups causes all previous lines matching the cur‐
rent line to be removed from the history list before that line
is saved. Any value not in the above list is ignored. If
HISTCONTROL is unset, or does not include a valid value, all
lines read by the shell parser are saved on the history list,
subject to the value of HISTIGNORE. The second and subsequent
lines of a multi-line compound command are not tested, and are
added to the history regardless of the value of HISTCONTROL.
入力してecho $HISTCONTROL
設定方法を確認してください。
- 無視される- 互いに続く同じコマンドを無視します。
- スペースを無視する- おっしゃるように空白で始まる命令は無視してください。
- 両方とも無視- 上記の両方
- こすり落とす- 以前のコマンドを再利用したときに削除
私の考えでは有効にしましたが、erasedups
後で再利用されたため、コマンドが失われたようです。
ヒスティンヨ
特定のコマンドまたはパターンが記録に現れないように完全に抑制することも可能である。
echo $HISTIGNORE
ブロックされたコンテンツを表示するには入力してください。パターンリストはコロンで区切られています:
。モードを無効にすることもできます(たとえば、history*
歴史という単語で始まるすべてのコマンド)。
障害履歴
そして歴史それでも無効にすることができます。
これらのシナリオのいずれも該当しない場合は、履歴に完全に保存されていないコマンドシーケンスを追加して質問を明確にすることができます。