Answers:
!
是一项功能,最初出现在C shell中,早在您可以依靠终端获得箭头键的那几天。如果将当前命令编号添加到提示(PS1="\!$ "
)中,则特别有用,这样您可以快速查看屏幕以获取过去命令的编号。
既然您可以使用箭头键和类似的功能Ctrl-R来搜索命令历史记录,那么我对该功能的使用并不多。
您可能仍然发现它有用的一个变体是!!
,它重新执行上一个命令。就其本身而言,我发现的!!Enter速度并不比快↑ Enter,但是将其组合成更大的命令时可能会有所帮助。
例如:一个共同的导频误差上sudo
为基础的系统是忘记sudo
上需要额外的特权的指令前缀。新手重新输入整个命令。勤奋的学生会从Shell的命令历史记录中编辑命令。开明的一种sudo !!
。
Bash允许您!
使用set +o histexpand
或禁用Shell中的处理set +H
。您可以使用在Zsh中禁用它set -K
。
sudo
,或其他东西),则可以这样做sudo !!
。这可能比“ Up / Ctrl-A(或Home,如果您足够幸运的话)/ sudo / space / enter”快一点。YMMV。:)
echo 'Hi!'
或echo "Hi!"
或echo Hi\!
。所有人都做同样的事情。
setopt NO_BANG_HIST
在zsh中,可能比记住更有趣-K
。
如果这里没有更长的答案,那么我最近就读过一个,因此超级用户肯定有一个答案。在bash手册页中,您可以找到有关此问题的标题为HISTORY EXPANSION的巨大部分。
您可以完成整个主机,而不仅仅是运行最后一个命令或命令号X。您可以执行诸如!cat
运行以开头的最后一个命令的操作cat
。或!?bash?:s/bash/csh/
运行最后一个包含bash
但用代替的命令csh
。
!!:s/bash/csh/
实际上运行最后一个命令,然后将bash替换为csh(如果存在)。不是最后一个包含bash的命令。那可能是!?bash?:s/bash/csh/
或也许!?bash?:s/%/csh/
man
页面,该功能还是难以理解。感谢您指出相关部分-这是实际文档中唯一可以充分说明这一点的地方。
当然,您可以!!
重用bash shell中的最后一个命令。然后!$
可以重用上一个命令的最后一部分。
例如查看一些文件
less path/to/your/file.txt
如果现在要编辑同一文件,则可以使用!$
来从上一条命令中仅获取文件路径。
vim !$
$touch f1 f2
然后$vim !$
评估为$vim f2