在哪里可以找到有关“sudo !!”的文档命令

在哪里可以找到有关“sudo !!”的文档命令

我刚刚了解到 Linux 有一个sudo !!命令实际上适用sudo于最后输入的命令。我从来没有听说过。

这是一个共同的控制吗?我在哪里可以找到有关它的文档?

答案1

这只是 bash 快捷方式。sudo!!顺便说一句,事实并非如此。是sudo !!(注意空格)。

bash 中的命令!!基本上是前一个命令的扩展。

看一下 bash 手册页的“历史扩展”部分:

http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators

答案2

实际上,它由您可能熟悉的sudo !!命令和一个组成sudo事件指示符, !!,指最后输入的命令。您可以在bash手册页的 参考资料 部分中找到更多信息Event Designators

Event Designators
   An event designator is a reference to a command line entry in the  his‐
   tory  list.   Unless  the reference is absolute, events are relative to
   the current position in the history list.

   !      Start a history substitution, except when followed by  a  blank,
          newline,  carriage return, = or ( (when the extglob shell option
          is enabled using the shopt builtin).
   !n     Refer to command line n.
   !-n    Refer to the current command minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
   !string
          Refer to the most recent command preceding the current  position
          in the history list starting with string.
   !?string[?]
          Refer to the most recent command preceding the current postition
          in the history list containing string.  The trailing  ?  may  be
          omitted if string is followed immediately by a newline.
   ^string1^string2^
          Quick  substitution.   Repeat  the  previous  command, replacing
          string1 with string2.  Equivalent  to  ``!!:s/string1/string2/''
          (see Modifiers below).
   !#     The entire command line typed so far.

答案3

这种功能分离是最美丽的设计原则之一,使得 Linux/Unix 比其他替代方案更强大,其中每个程序都是一个独立的约定和功能岛。

“让每个程序只做一件事,并且做好”

而不是实施!!在 sudo (或任何其他命令)内部,可以从重复前一个命令中受益——它被实现一次(在 shell 中),所有命令都可以从中受益。所以你可以这样做:

$ echo !!     # will echo the last command
$ time !!     # will repeat and time the last command
$ strace !!   # will repeat the last program while system-call tracing it

等等。

但事情并没有就此结束。 shell 的作用远不止通过 !事件指示符。在执行命令之前,它会执行变量扩展、文件名通配符扩展(通配符)、命令替换、文件/IO 重定向等等。所有这些都可以在从 shell 调用的任何命令中利用和使用。

另一个很大的优点是,如果您花一些时间学习 shell(在本例中为“man bash”),您只需学习一次,就可以随时随地使用这些强大的功能。学习一组强大的原则和约定要容易得多,而不是重新学习每个程序或实用程序中如何处理命令行 agr。

相关内容