有时我执行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 的众多终端)中启用块选择模式。
接下来,只需拖动并释放,以便您的选择块覆盖您要复制的所有行(直到最长命令的全宽)。然后你只需粘贴它,换行符就会被保留。
这是一个简单的技巧,我每天在进行快速复制/粘贴时多次使用,以避免诸如前缀行号、日志文件中的时间戳等问题。
请注意,如果复制的命令之一跨越多行,则此操作将不起作用!