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


54

我看到有人在打字

apt-get install !!

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

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

该怎么apt-get install !!办?我的机器上可能无法运行的什么遗漏?


Answers:


74

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

尝试这个:

 echo hello
 !!

在这种情况下,!!将扩展到另一个echo hello

我想象发生了什么事,他们试图运行命令,但命令失败并抱怨未安装。因此,他们输入sudo apt-get install !!了该名称,因为软件包名称恰好与他们尝试运行的命令名称相同。产生的命令将尝试使用与他们刚尝试执行的命令相同的名称来安装软件包。


10
是的,可能就是这样。如果我运行lynx,看到它尚未安装,然后运行apt-get install !!它将安装lynx。它对我不起作用,因为我尝试apt-get install !!作为唯一命令。
Thomas Weller 2015年

4
另一个常见的用法是应该以sudo诸如的方式运行apt-get install某些内容。
MBraedley,2015年

6
@AL:您首先输入apt-get install some-program,当您意识到自己没有权限时,您只能输入sudo !!,该权限会扩展为sudo apt-get install some-program
mgarciaisaia 2015年

3
!!是的别名!-1,表示bash历史记录中的最后一项。!-2是倒数第二个等等。
蒂姆(Tim)

41

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

来自man bash

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

例如,如果您运行命令:

echo "foo"

然后,如果您运行:

sudo apt-get install !!

它将扩展为:

sudo apt-get install echo foo

如您所见,它被扩展为两个包echo,另一个为foo。没有名为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,正在安装中。

我建议您不要这样做(除非您确定),明确表示并不会造成伤害。


2
的伟大解释!!。我知道它的意思,但是我喜欢您描述它的方式。
Terrance

1
+1警告,不要在家中尝试此操作。
沙杜尔2015年

16

!!:参考上一条命令。这是!-1(The source)的同义词。

例如,如果我执行:

./test

然后记住我需要成为Root,然后我可以简单地输入:

sudo !!

与输入相同:

sudo ./test

当您的最后一个命令包含很多字符时,此功能很有用。


1
辉煌!我从没想过sudo !!命令。我多年以来一直在做的事情是按一次向上键,然后将光标一直移到最左边并添加sudo
IQAndreas 2015年

1
@IQAndreas您的方式使您有机会仔细检查该命令,这在运行时不是一件坏事sudo
Matt Nordhoff 2015年

1
我总是读“ sudo !!” 作为“我的意思是为f ***着想sudo”
Viktor Mellgren 2015年

1
@Vixen:在这种情况下,他妈的也很适合您
Thomas Weller

@IQAndreas将光标一直向左移动似乎太无聊了。为什么不只是Ctrl+A或至少不是Home
Ruslan

2

这个问题已经回答了,所以我不再重复。但是,我想指出的是,各种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或其他)键盘快捷键,这将是您今天做的最好的事情!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.