Bash 及其感叹号命令,在执行之前预览实际命令?

Bash 及其感叹号命令,在执行之前预览实际命令?

!作为某个字符串的前缀将执行命令缓冲区中以给定(部分)字符串开头的任何命令。它还有一些其他用途。参见例如理解 bash 中的感叹号 (!)

我的问题是,如何在执行命令之前预览将要执行的命令?例如,如果我这样做!for,并且我之前已经编写了几个以“for”开头的命令,但我不完全确定我认为是最后一个的命令是否确实是我认为的命令。如果 bash 可以在实际执行命令之前向我显示将要执行的命令是什么,那将非常有用。有没有办法在 bash 中做到这一点?

答案1

Bash 继承!csh.在两个 shell 中预览命令的方法是:p在末尾添加 a 。

!for:p

答案2

您可以使用histverifyshell 选项:

histverify
    If set, and readline is being used, the results of history substitution
    are not immediately passed to the shell parser.  Instead,
    the resulting line is loaded into the readline editing buffer,
    allowing further modification.

例子:

$ shopt -s histverify
$ !shopt

另一个有用的选项是histreedit

histreedit
    If set, and readline is being used, a user is given the opportunity
    to re-edit a failed history substitution.

答案3

我通常放弃(IMO 损坏的)!替换并使用 shell 历史函数来代替;例如在vi模式(您肯定会在中找到等效选项emacs 模式)您将搜索最后一次出现,您的示例是<Esc> / for <Enter>,并且(如果这不是您想要的命令)重复搜索for使用该键的下一次出现n(或N朝另一个方向走),并确认所需的命令与<Enter>.

答案4

如果您使用vi模式 ( set -o vi),请按EscC-[kUP来在历史记录中上升,或按jDOWN来下降。您可以编辑您所得到的内容或使用 执行它Enter

相关内容