Eu faço o seguinte para tornar o histórico mais sensato (ou seja, ver quando um comando é executado pode ser bastante crítico na solução de problemas)
shopt -s histappend; # Append commands to the bash history (~/.bash_history) instead of overwriting it # https://www.digitalocean.com/community/tutorials/how-to-use-bash-history-commands-and-expansions-on-a-linux-vps
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" # -a append immediately, then -c clear history, then -r read history every time a prompt is shown instead of after closing the session.
export HISTTIMEFORMAT="%F %T " HISTCONTROL=ignorespace:ignoreboth:erasedups HISTSIZE=1000000 HISTFILESIZE=1000000000 # make history very big and show date-time
alias h='history'; # Note: 'h 7' will show last 7 lines
Isso é bom, mas eu quero ser capaz de obter a saída do histórico original se eu precisar. Isso funciona para ho
("história original"), mas não posso mais fazer "ho 7"
alias ho="history | awk '{\$2=\$3=\"\"; print \$0}'" # 'history original'
Então eu tentei o seguinte, mas isso falha com erros:
function ho() { history $1 | awk '{\$2=\$3=\"\"; print \$0}'; } # 'history original'
Como posso criar um alias ou função que me permita fazer ho 7
e ver apenas as últimas 7 linhas?
Por "história original", suponho que você queira dizer que deseja a saída sem carimbos de data e hora. Em caso afirmativo, apenas defina
HISTTIMEFORMAT
como vazio parahistory
:Em um apelido,
Você está quase lá. Você está definindo uma função, mas usando a palavra-
alias
chave. Basta remover oalias
e você deve estar bem. Em seguida, você está escapando das variáveis awk, mas não está colocando aspas duplas, então os escapes estão sendo passados paraawk
. Isto é o que você procura: