我执行以下操作以使历史记录更加合理(即在故障排除时查看命令何时运行可能相当重要)
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
这很好,但我希望能够在需要时获得原始历史输出。这适用于ho
(“历史原创”),但我不能再做“ho 7”
alias ho="history | awk '{\$2=\$3=\"\"; print \$0}'" # 'history original'
所以我尝试了以下操作,但这失败并出现错误:
function ho() { history $1 | awk '{\$2=\$3=\"\"; print \$0}'; } # 'history original'
我怎样才能创建一个别名或函数来允许我做ho 7
并且我只会看到最后 7 行?
答案1
你快到了。您正在定义一个函数,但使用alias
关键字。只要删除alias
,你应该没问题。接下来,您要转义 awk 变量,但没有使用双引号,因此转义值将传递给awk
.这就是你所追求的:
ho() { history "$@" | awk '{$2=$3=""; print}'; }
答案2
通过“历史原始”我假设你的意思是你想要没有时间戳的输出。如果是这样,只需将其设置HISTTIMEFORMAT
为空history
:
HISTTIMEFORMAT= history
在别名中,
alias ho='HISTTIMEFORMAT= history'