Merge pull request #1940 from gaelicWizard/history
Feature: automatic history managementpull/2068/head
commit
253004a599
|
|
@ -83,6 +83,7 @@ completion/available/wpscan.completion.bash
|
||||||
# libraries
|
# libraries
|
||||||
lib/colors.bash
|
lib/colors.bash
|
||||||
lib/helpers.bash
|
lib/helpers.bash
|
||||||
|
lib/history.bash
|
||||||
lib/log.bash
|
lib/log.bash
|
||||||
lib/preexec.bash
|
lib/preexec.bash
|
||||||
lib/search.bash
|
lib/search.bash
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# shellcheck shell=bash
|
||||||
|
#
|
||||||
|
# Functions for working with Bash's command history.
|
||||||
|
|
||||||
|
function _bash-it-history-init() {
|
||||||
|
safe_append_preexec '_bash-it-history-auto-save'
|
||||||
|
safe_append_prompt_command '_bash-it-history-auto-load'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _bash-it-history-auto-save() {
|
||||||
|
case $HISTCONTROL in
|
||||||
|
*'noauto'* | *'autoload'*)
|
||||||
|
: # Do nothing, as configured.
|
||||||
|
;;
|
||||||
|
*'auto'*)
|
||||||
|
# Append new history from this session to the $HISTFILE
|
||||||
|
history -a
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Append *only* if shell option `histappend` has been enabled.
|
||||||
|
shopt -q histappend && history -a && return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function _bash-it-history-auto-load() {
|
||||||
|
case $HISTCONTROL in
|
||||||
|
*'noauto'*)
|
||||||
|
: # Do nothing, as configured.
|
||||||
|
;;
|
||||||
|
*'autosave'*)
|
||||||
|
# Append new history from this session to the $HISTFILE
|
||||||
|
history -a
|
||||||
|
;;
|
||||||
|
*'autoloadnew'*)
|
||||||
|
# Read new entries from $HISTFILE
|
||||||
|
history -n
|
||||||
|
;;
|
||||||
|
*'auto'*)
|
||||||
|
# Blank in-memory history, then read entire $HISTFILE fresh from disk.
|
||||||
|
history -a && history -c && history -r
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
: # Do nothing, default.
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_bash_it_library_finalize_hook+=('_bash-it-history-init')
|
||||||
|
|
@ -1,20 +1,22 @@
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
about-plugin 'eternal bash history'
|
about-plugin 'eternal bash history'
|
||||||
|
|
||||||
# Load after the history plugin
|
if [[ ${BASH_VERSINFO[0]} -lt 4 ]] || [[ ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 3 ]]; then
|
||||||
# BASH_IT_LOAD_PRIORITY: 375
|
_log_warning "Bash version 4.3 introduced the 'unlimited' history size capability."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Modify history sizes before changing location to avoid unintentionally
|
# Modify history sizes before changing location to avoid unintentionally
|
||||||
# truncating the history file early.
|
# truncating the history file early.
|
||||||
|
|
||||||
# "Numeric values less than zero result in every command being saved on the history list (there is no limit)"
|
# "Numeric values less than zero result in every command being saved on the history list (there is no limit)"
|
||||||
export HISTSIZE=-1
|
readonly HISTSIZE=-1 2> /dev/null || true
|
||||||
|
|
||||||
# "Non-numeric values and numeric values less than zero inhibit truncation"
|
# "Non-numeric values and numeric values less than zero inhibit truncation"
|
||||||
export HISTFILESIZE='unlimited'
|
readonly HISTFILESIZE='unlimited' 2> /dev/null || true
|
||||||
|
|
||||||
# Use a custom history file location so history is not truncated
|
# Use a custom history file location so history is not truncated
|
||||||
# if the environment ever loses this "eternal" configuration.
|
# if the environment ever loses this "eternal" configuration.
|
||||||
HISTDIR="${XDG_STATE_HOME:-${HOME?}/.local/state}/bash"
|
HISTDIR="${XDG_STATE_HOME:-${HOME?}/.local/state}/bash"
|
||||||
[[ -d ${HISTDIR?} ]] || mkdir -p "${HISTDIR?}"
|
[[ -d ${HISTDIR?} ]] || mkdir -p "${HISTDIR?}"
|
||||||
export HISTFILE="${HISTDIR?}/history"
|
readonly HISTFILE="${HISTDIR?}/history" 2> /dev/null || true
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
about-plugin 'search history using the prefix already entered'
|
about-plugin 'search history using the prefix already entered'
|
||||||
|
|
||||||
# Load after the history plugin
|
|
||||||
# BASH_IT_LOAD_PRIORITY: 375
|
|
||||||
|
|
||||||
# enter a few characters and press UpArrow/DownArrow
|
# enter a few characters and press UpArrow/DownArrow
|
||||||
# to search backwards/forwards through the history
|
# to search backwards/forwards through the history
|
||||||
if [[ ${SHELLOPTS} =~ (vi|emacs) ]]; then
|
if [[ ${SHELLOPTS} =~ (vi|emacs) ]]; then
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
about-plugin 'search history using the substring already entered'
|
about-plugin 'search history using the substring already entered'
|
||||||
|
|
||||||
# Load after the history plugin
|
|
||||||
# BASH_IT_LOAD_PRIORITY: 375
|
|
||||||
|
|
||||||
# enter a few characters and press UpArrow/DownArrow
|
# enter a few characters and press UpArrow/DownArrow
|
||||||
# to search backwards/forwards through the history
|
# to search backwards/forwards through the history
|
||||||
if [[ ${SHELLOPTS} =~ (vi|emacs) ]]; then
|
if [[ ${SHELLOPTS} =~ (vi|emacs) ]]; then
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,13 @@ about-plugin 'improve history handling with sane defaults'
|
||||||
# variable when the shell exits, rather than overwriting the file.
|
# variable when the shell exits, rather than overwriting the file.
|
||||||
shopt -s histappend
|
shopt -s histappend
|
||||||
|
|
||||||
# erase duplicates; alternative option: export HISTCONTROL=ignoredups
|
# 'ignorespace': don't save command lines which begin with a space to history
|
||||||
export HISTCONTROL=${HISTCONTROL:-ignorespace:erasedups}
|
# 'erasedups' (alternative 'ignoredups'): don't save duplicates to history
|
||||||
|
# 'autoshare': automatically share history between multiple running shells
|
||||||
|
: "${HISTCONTROL:=ignorespace:erasedups:autoshare}"
|
||||||
|
|
||||||
# resize history to 100x the default (500)
|
# resize history to 100x the default (500)
|
||||||
export HISTSIZE=${HISTSIZE:-50000}
|
: "${HISTSIZE:=50000}"
|
||||||
|
|
||||||
# Flush history to disk after each command.
|
|
||||||
export PROMPT_COMMAND="history -a;${PROMPT_COMMAND}"
|
|
||||||
|
|
||||||
function top-history() {
|
function top-history() {
|
||||||
about 'print the name and count of the most commonly run tools'
|
about 'print the name and count of the most commonly run tools'
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,7 @@ function aws_profile {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _save-and-reload-history() {
|
function _save-and-reload-history() {
|
||||||
local autosave=${1:-0}
|
local autosave="${1:-${HISTORY_AUTOSAVE:-0}}"
|
||||||
[[ $autosave -eq 1 ]] && history -a && history -c && history -r
|
[[ ${autosave} -eq 1 ]] && local HISTCONTROL="${HISTCONTROL:-}${HISTCONTROL:+:}autoshare"
|
||||||
|
_bash-it-history-auto-save && _bash-it-history-auto-load
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue