追加読書

追加読書

複数のコマンドを入力しましたが、実行したときに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*歴史という単語で始まるすべてのコマンド)。

障害履歴

そして歴史それでも無効にすることができます

これらのシナリオのいずれも該当しない場合は、履歴に完全に保存されていないコマンドシーケンスを追加して質問を明確にすることができます。

関連情報