如何才能通过数字从历史记录中调用命令而不执行它?

如何才能通过数字从历史记录中调用命令而不执行它?

我怎样才能通过编号从历史记录中抓取命令到我的命令行而不执行它?

This immediately executes command number 555 which I'm not looking for:
$ history 10
$ !555

This opens the command up in an editor, which is overkill most of the time:
$ history 10
$ fc 555

This is an example of what I'm looking for:
$ history 10
$ #555
$ [command 555 from history listing now sitting here on my command line ready to edit or execute]

谢谢你!

答案1

shopt -s histverify

如果启用了 histverify shell 选项,并且正在使用 Readline,则历史替换不会立即传递给 shell 解析器。相反,扩展的行会重新加载到 Readline 编辑缓冲区中以供进一步修改。

答案2

:p在数字后添加。

例子:

1357  locate pam_loginuid
1358  history
rinzwind@discworld:~$ !1358:p
history
rinzwind@discworld:~$ !1357:p
locate pam_loginuid
rinzwind@discworld:~$ 

打印出来显示但并未执行。

要在 BASH 中使用它,您需要做更多。例如:
https://tldp.org/LDP/abs/html/histcommands.html

#!/bin/bash
set -o history
var=$(history); echo "$var"   # 1  var=$(history)`

将会把所有的历史记录放入 var 中,并且您需要更多的逻辑来找到您想要的命令。

答案3

如果您正在使用bash,我假设您是;输入历史记录编号:

$ !555

然后按:Ctrl++ Alte现在历史记录中的所需命令正在等待执行,而不会改变历史记录的默认行为:

$ command

它也适用于aliases、、substitutions并且expansions历史参数说:$ echo !555:1、、、。~$HOME$(echo hi)


这就是我如何确保在实际运行历史命令之前准确地执行它。

答案4

  • 您可以使用 bash 内置命令read 直接地像这样:

    read -e -i "!555" -p "${PS1@P}" input; $input
    
  • 或者你可以将其添加到功能~/.bashrc喜欢这样:

    showhist() {
    
            read -e -i "$*" -p "${PS1@P}" input
            $input
    
    }
    

    像这样使用它:

    showhist !555
    

这将在提示符下显示命令,您可以编辑它....Enter执行或者Ctrl+c中止。

相关内容