这个 bash 别名如何以 sudo 的形式重复上一个命令?

这个 bash 别名如何以 sudo 的形式重复上一个命令?

我最近遇到了这个巧妙的 bash 别名来重复上次发出的命令,但作为 sudo。这可以通过sudo !!在命令失败后直接在终端中使用来完成。

我找到的别名是alias mycmd='sudo $(history -p \!\!)'

我只是不清楚这是如何运作的。

答案1

$(history -p \!\!)是一种获取最后执行的命令而不将其再次添加到历史记录中的方法。从help history

  -p    perform history expansion on each ARG and display the result
    without storing it in the history list

在 bash 中,!!扩展为最后执行的命令,但不能直接在别名中使用它,因为此扩展在别名扩展之前执行。 (历史扩展是最早发生的之一 - 它甚至发生在大括号扩展之前(即通常首先).)

因此,您必须使用某种方法来获取最后执行的命令,这可以使用 来完成history -p,它扩展了!!shell 的方式。

虽然我不知道他们为什么要逃走!。对我来说,没有反斜杠它工作得很好。

相关内容