history
我在 bash 中运行命令,但它给了我一切......
我注意到我可以通过运行来限制以前显示的命令的数量history | tail -n <num-of-lines+1>
;那么有没有什么方法可以只查看自从我登录以来我运行的命令数量以及我登录 bash 以来运行的命令数量?
答案1
如果您只想获得一般计数而不需要具体信息,请尝试echo $LINENO
.
解释器将您的会话视为流,并计算传入的行数。这就是基本上您已按回车键多少次。
如果您键入多行命令,则每行将单独计数。
答案2
有趣的。我相信没有内置的方法,但您可以定义一个新变量并在每个命令后递增它。例如:
$ count=0
$ PROMPT_COMMAND='count=$((count + 1))'
$ echo $count
1
$ echo command
command
$ echo another command
another command
$ echo $count
4
编辑:
或者知道历史记录存储在内存中,直到 shell 退出类似的操作,前提是您没有修改历史记录格式或PROMPT_COMMAND
在每个命令后使用保存历史记录:
diff <(history | sed -E 's,\s+?[0-9]+ ,,') ~/.bash_history
答案3
没有内置命令。您可以稍微作弊,但结果取决于您的设置。我能想到的最接近的是:
history | tail -n `history | tail -n 1 | awk "{print \\\$1-$HISTSIZE;}"`
您可以给它起别名。
命令history
枚举它的条目。大多数时候你$HISTFILE
有最大条目($HISTSIZE
值)。因此,您会发现上面编号的额外命令$HISTSIZE
是在此 ssh 会话中键入的命令列表。
它的工作原理是用数字显示历史记录,而不是获取它的最后一行和第一列并减去$HISTSIZE
值,这样我们就知道登录后有多少个命令。该参数被发送到 tail -n,它仅显示历史记录中最后条目的数量。
$HISTSIZE
不幸的是,当历史命令少于命令时,它无法正常工作。为了使它更好,您需要在.bashrc
文件中进行一些额外的设置,因此每当您登录时,都会设置额外的变量来记住历史记录中的条目数。然后使用该变量而不是$HISTSIZE
答案4
对于每个会话的计数,我将使用 HISTCMD。不过,它会跟踪所有 bash 保存的历史记录,因此为此 shell 实例保存传入的 HISTCMD 的副本,然后对其进行减去。
在~.bashrc
:
OHISTCMD=$HISTCMD
然后任何时候你想知道计数,
echo $((HISTCMD - OHISTCMD - 1))
从手册中注意到:
如果 HISTCMD 未设置,它将失去其特殊属性,即使随后重置也是如此。
而且使用向上箭头从历史记录中调用命令不会增加 HISTCMD。
太糟糕了全局变量history_offset
外部不可用!