我看到有人打字
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
如您所见,它扩展为两个包,即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
正在安装。
我建议你不要这样做(除非你确定),明确地说出来不会有害处。
答案3
!!
:参考上一个命令。这是!-1
(来源)。
例如,如果我执行:
./test
然后记住我需要是 Root,然后我只需输入:
sudo !!
这与输入以下内容相同:
sudo ./test
当你的最后一个命令包含很多字符时它很有用。
答案4
这个问题已经回答过了,所以我就不重复了。不过,我想指出的是,各种 shell 中都有许多这样的快捷方式,可以帮助重复/查找/编辑命令。我使用的一些快捷方式是:
!$
后面跟着的ENTER是最后一个命令的最后一个单词。例如,ls -l /let/me/in cd !$
这将使你陷入/let/me/in
- Ctrl-R然后输入上一个命令中的几个单词。例如,如果您输入了
vi /home/mycoolproject.sh
一些随机命令,如ls
、cd
、pwd
等,那么只需输入Ctrl-R然后输入cool
即可调出该vi
命令。
只需搜索 bash(或 csh 或其他)键盘快捷键,这将是您今天所做的最好的事情!