“apt-get install !!” 起什么作用以及如何使其工作?

“apt-get install !!” 起什么作用以及如何使其工作?

我看到有人打字

apt-get install !!

他这样做了几次,每次都安装了不同的程序。它似乎自动知道下一步需要什么。

但是,当我在 Ubuntu 14.04.1 LTS 虚拟机上尝试时,它只显示一些使用说明。谷歌搜索apt-get install !!似乎不太好用。许多搜索结果不包含双感叹号。

它能做什么apt-get install !!?我的机器可能缺少什么导致它无法工作?

答案1

!!是 bash 中的快捷方式,表示最后执行的命令。

尝试这个:

 echo hello
 !!

在此背景下,!!将扩大到另一个echo hello

我猜想发生的事情是他们尝试运行一个命令,但失败了,并抱怨它没有安装。然后他们输入了,sudo apt-get install !!因为包名称恰好与他们尝试运行的命令的名称相同。结果命令将尝试安装与他们刚刚尝试执行的命令同名的包。

答案2

!!与 无关apt-get。它是一个 shell 关键字,将被扩展为前一个命令。此扩展由 shell 在解释当前命令之前完成。

man bash

!! 请参阅上一个命令。这是 `!-1' 的同义词。

例如,如果你运行命令:

echo "foo"

然后如果你运行:

sudo apt-get install !!

它将扩展为:

sudo apt-get install echo foo

如您所见,它扩展为两个包,即echofoo。没有名为foo和的独立包echo。除了内置的 shell 之外,echo还有一个/bin/echo可执行文件,它是 GNU-coreutils 包的一部分。因此,您将收到错误消息,提示没有可用的包。

另一方面,另一个人可能会做这样的事情:

$ cowsay
The program 'cowsay' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
sudo apt-get install cowsay
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  filters
The following NEW packages will be installed:
  cowsay
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 18.5 kB of archives.

如您所见,cowsay正在安装。

我建议你不要这样做(除非你确定),明确地说出来不会有害处。

答案3

!!:参考上一个命令。这是!-1来源)。

例如,如果我执行:

./test

然后记住我需要是 Root,然后我只需输入:

sudo !!

这与输入以下内容相同:

sudo ./test

当你的最后一个命令包含很多字符时它很有用。

答案4

这个问题已经回答过了,所以我就不重复了。不过,我想指出的是,各种 shell 中都有许多这样的快捷方式,可以帮助重复/查找/编辑命令。我使用的一些快捷方式是:

  1. !$后面跟着的ENTER是最后一个命令的最后一个单词。例如,

    ls -l /let/me/in
    cd !$
    

这将使你陷入/let/me/in

  1. Ctrl-R然后输入上一个命令中的几个单词。例如,如果您输入了vi /home/mycoolproject.sh一些随机命令,如lscdpwd等,那么只需输入Ctrl-R然后输入cool即可调出该vi命令。

只需搜索 bash(或 csh 或其他)键盘快捷键,这将是您今天所做的最好的事情!

相关内容