当前位置: 首页>>技术问答>>正文


“apt-get安装!!”做什么以及如何使其工作?

, ,

问题描述

我见过有人打字

apt-get install !!

他做了几次,每次都安装了一个不同的程序。似乎它会自动找出接下来需要的东西。

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

apt-get install !!做了什么以及在我的机器上可能缺少哪些它不起作用?

最佳解决方案

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

试试这个:

 echo hello
 !!

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

我想象发生了什么,他们试图运行一个命令,它失败了,并抱怨它没有安装。因此,他们键入了sudo apt-get install !!,因为包名称与他们尝试运行的命令的名称恰好相同。生成的命令将尝试使用与刚刚尝试执行的命令相同的名称来安装程序包。

次佳解决方案

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

来自man bash

!! Refer to the previous command. This is a synonym for `!-1′.

例如,如果您运行命令:

echo "foo"

然后,如果你运行:

sudo apt-get install !!

它将扩展为:

sudo apt-get install echo foo

如您所见,它扩展为两个包,即echo,另一个是foo。没有名为fooecho的独立包。除了内置的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

我建议你不要这样做(除非你确定),明确不伤害。

第三种解决方案

!!:请参阅上一个命令。这是!-1(source)的同义词。

例如,如果我执行:

./test

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

sudo !!

它与输入相同:

sudo ./test

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

第四种方案

问题已经得到解答,所以我不会重复。但是,我想指出在各种shell中有许多这样的快捷方式可以帮助重复/查找/编辑命令。我使用的一些是:

  1. !$后跟ENTER将键入最后一个命令的最后一个单词。例如,

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

这将使您进入/let/me/in

  1. CtrlR然后键入前一个命令中的几个单词。例如,如果您键入vi /home/mycoolproject.sh并使用一些随机命令(如lscdpwd等),则只需键入CtrlR,然后键入cool即可启动vi命令。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1345.html,未经允许,请勿转载。