フォルダの「ローカル」bash履歴を覚えていますか?

フォルダの「ローカル」bash履歴を覚えていますか?

長いパラメータを使用するフォルダにスクリプトがあります。完全な履歴を返すのではなく、特定のディレクトリで実行されたコマンド履歴を取得できますか?

答え1

bashのPROMPT_COMMANDをフックすると、新しいプロンプトが受信されるたびにこの関数が実行されるので、今この履歴をカスタマイズしたいディレクトリにあることを確認するのに良い時間です。この関数には4つの主要な分岐があります。

  1. 現在のディレクトリ($PWD)が変更されていない場合、何もしません(返されます)。

障害のある人の場合持つ変更してから、「カスタムディレクトリ」コードを1つの場所に分割することが唯一の目的であるローカル関数を設定します。私のテストディレクトリを独自のディレクトリ(区切り)に置き換える必要があります|

  1. カスタムディレクトリに変更していない場合、またはカスタムディレクトリに変更していない場合は、「古いディレクトリ」変数を更新して関数から返されます。

ディレクトリを変更したので、以前のディレクトリ変数を更新し、メモリ内の履歴をHISTFILEに保存し、メモリ内の履歴を消去します。

  1. 変えたら入力するディレクトリをカスタマイズし、HISTFILEを.bash_history現在のディレクトリのファイルに設定します。

  2. そうでなければ、私たち全員が変わったでしょう。外のディレクトリーをカスタマイズして、HISTFILE をストック・ディレクトリーにリセットします。

最後に履歴ファイルを変更したので、以前の履歴をもう一度読んでください。

スムーズな実行を維持するために、スクリプトはPROMPT_COMMAND値を設定し、内部で使用される2つの変数(インベントリHISTFILEと「以前のディレクトリ」)を格納します。

prompt_command() {
  # if PWD has not changed, just return
  [[ $PWD == $_cust_hist_opwd ]] && return

  function iscustom {
    # returns 'true' if the passed argument is a custom-history directory
    case "$1" in
      ( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
      ( * ) return 1;;
    esac
  }

  # PWD changed, but it's not to or from a custom-history directory,
  # so update opwd and return
  if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
  then
    _cust_hist_opwd=$PWD
    return
  fi

  # we've changed directories to and/or from a custom-history directory

  # save the new PWD
  _cust_hist_opwd=$PWD

  # save and then clear the old history
  history -a
  history -c

  # if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
  if iscustom "$PWD"
  then
    HISTFILE=$PWD/.bash_history
  else
    HISTFILE=$_cust_hist_stock_histfile
  fi

  # pull back in the previous history
  history -r
}

PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD

答え2

ジェフの回答単一のディレクトリの記録を望んでいますが、インストールに同意する場合はお勧めします。扱いにくいあなたはそれを使用することができます各履歴ディレクトリこのディレクトリに関連するすべてのディレクトリの履歴を取得します。

次の方法でzshをインストールできます。

brew install zsh

またはインストールしたい場合ああ、、追加できます過去のデータベースhistdbによって追加されたsqliteデータベースを照会するためにプラグインを使用し、カスタム照会を作成します。私はそれについて書いて投稿しました。開発日誌郵便はがき。調査するボーナスコマンド部分。

クエリは次のとおりです。

show_local_history() {
    limit="${1:-10}"
    local query="
        select history.start_time, commands.argv 
        from history left join commands on history.command_id = commands.rowid
        left join places on history.place_id = places.rowid
        where places.dir LIKE '$(sql_escape $PWD)%'
        order by history.start_time desc
        limit $limit
    "
    results=$(_histdb_query "$query")
    echo "$results"
}

これはオプションの制限も可能です。

show_local_history 50

例えば。

答え3

長い引数を含むコマンドを複数回使用する必要がある場合は、通常はmyにエイリアスを作成するか、必要に応じて~/.bash_aliasesyourに入れます。~/.bashrcこれにより、履歴内の以前のコマンドを見つけるのではなく、簡単で時間を節約できます。

関連情報