bash,将参数传递给“history”命令

bash,将参数传递给“history”命令

我执行以下操作以使历史记录更加合理(即在故障排除时查看命令何时运行可能相当重要)

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'

相关内容