Answers:
!!运行您之前的命令history。此外,执行!-1,!-2等等将执行您的最后一个命令,第二个最后一个命令,依此类推。便利!
!<command>~/.bash_history<command>
!从那里复制的这种愚蠢的bash东西使tcsh我搞砸了很多次,比以往任何时候都有用。双引号不能避免对的解释!。 $ foo "!bar"-> !bar: event not found。

答案:您sudo !!随后直接输入即可以提升的权限重复上一个命令。
您可以尝试使用向上箭头键滚动浏览您的旧命令,然后重写/更改它们并sudo在其前面添加。(箭头键上方的主页按钮会将位置设置为开头。)
我不喜欢这个sudo !!主意,因为有时您在两者之间添加了另一个命令,并且不再记得了。
sudo !!,shell将会展开,!!以便您可以看到它正在尝试运行的命令。因此,按Ctrl-C并找到正确的命令可能会很烦人,但至少不会让您无所适从。
!!
sudo !!<TAB>自动完成!!。Bash可以扩展历史记录M-^(对于我来说,是alt + shift + 6),但这不太流畅(不过,您可以重新绑定它)。也有shopt -s histverify,它使您在使用历史记录扩展并按Enter键时,它会为您提供另一条提示行,其中包含执行的扩展以让您查看/编辑它。
shopt -s histverify。大多数人会习惯于Enter两次击打。到那时,他们仍然来不及检查发生了什么。
我将添加一个替代方法:键入短sudo !!而灵活:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
它的击键次数完全相同(我将“ ctrl + A”算作一个键...),但是添加“向上箭头”后,您就可以使用历史记录中的任何命令来执行此操作。
set -o vi)。然后您可以转义(进入命令模式),然后是“ I”(大写的“ i”,在行首插入)。
这个问题本来可以概括为“ 运行相同的命令,但要进行一些修改 ”,因为Unix中一项出色的设计决策是,在shell中实现一次的内容可以被从shell调用的任何命令所利用。
换句话说,这一招并不适用刚刚 于sudo:
sudo !!)重复上一个命令time !!)env A=b B=z !!)中重复上一个命令!!)历史记录扩展(也称为历史记录替换)只是一个shell功能,可以使重复以前的命令更加容易(击键次数更少)。检查您的Shell手册页中的history expansion。它描述了您可以使用历史记录进行操作的更多技巧和捷径,例如:
您可以按编号参考以前的命令:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
您可以在先前的命令中引用单个单词:
some-command !$ # run some-command on the last arg of previous command
您还可以在重复之前进行搜索:
!?awk # repeat the last command including the string 'awk'
您可以搜索历史记录,并用其他内容代替:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
还有更多功能,因为您可以将命令选择,arg选择,搜索和替换独立组合在一起。
您的shell手册页(在本例中为man bash)是您的朋友。
我使用zsh而不是bash并将其放在我的~/.zshrc,因此在命令行开头按Alt+ S插入sudo:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
不幸的是,我无法找到在bash中执行相同操作的方法。
如果要使用别名,则alias redo='sudo $(history -p !!)'出于某种原因必须使用。
我喜欢的方式:
但是只执行“ sudo !!”可能会更容易,这取决于您。