如何执行“history”命令而不使用行号以便复制多行命令?

如何执行“history”命令而不使用行号以便复制多行命令?

有时我执行history命令时可以连续看到 4 个命令。

我想复制这些命令,以便我可以再次运行它们。

我通常用鼠标和shift-ctrl-c来选择它们,效果很好,但我也得到了行号。

history没有行号我该怎么办?

我尝试了手册页,但不知所措。

答案1

请注意,历史输出可能取决于本地环境。在我的机器上它看起来像:

 $ history | tail -1
 2993  2012-08-13 17:42:17 echo "test"

你的答案对我来说都不起作用。

一个有用的选项fc(通常是内置的)可以完全独立于您的本地设置。

fc-n抑制输出中数字的选项。所以你的命令看起来像:

fc -l -n

它只输出最后几个命令。

要以这种方式输出整个历史记录,请使用:

fc -l -n 1  

要在开头不输出空格,可以使用 sed 删除它们:

fc -l -n 1 | sed 's/^\s*//'

答案2

使用 awk:

history | awk '{$1="";print}'

答案3

bash

history | tr -s ' ' | cut -d' ' -f3-

zsh和 中ksh

history -n

tcsh

history -h

编辑

另请参阅拉什关于使用的答案fc

答案4

另一种解决方案是使用终端的块选择法,如果有的话。通常您只需在选择之前按住 Ctrl 键即可用鼠标。这将在许多现代终端(当然是基于 libvte 的众多终端)中启用块选择模式。

接下来,只需拖动并释放,以便您的选择块覆盖您要复制的所有行(直到最长命令的全宽)。然后你只需粘贴它,换行符就会被保留。

这是一个简单的技巧,我每天在进行快速复制/粘贴时多次使用,以避免诸如前缀行号、日志文件中的时间戳等问题。

请注意,如果复制的命令之一跨越多行,则此操作将不起作用!

相关内容