我经常忘记使用来运行命令sudo。我正在寻找一种使bash函数(或别名)与重复最后一个命令的方法sudo。就像是:
S() {
sudo $(history 1)
}
有任何想法吗?
我经常忘记使用来运行命令sudo。我正在寻找一种使bash函数(或别名)与重复最后一个命令的方法sudo。就像是:
S() {
sudo $(history 1)
}
有任何想法吗?
Answers:
不够?
sudo !!
如果您想S简单地说:
alias S=sudo
并使用它
S !!
该!!均值last command
echo !! > script.sh
alias S='sudo $(history -p !!)'只是键入S
使用alias redo='sudo $(history -p !!)'。这是我发现的唯一可用于别名的东西。其他答案由于某些原因在别名中不起作用,即使我直接运行了它们,它们还是亲自尝试了。
添加和扩展aaron franke的响应(是正确的,但缺少原因),这样redo在配置别名之后简单地输入就可以了alias redo='sudo $(history -p !!);
这是我发现唯一可以使用别名的东西
有一些事情需要进行解释。
alias redo='sudo !!'
sudo尽管它确实解决了,但却无法执行该部分,因此无法正常工作!!。
为了sudo !!正确解析,shell解析指令必须与一起执行和连接sudo。因此,我们做到了;
alias redo='sudo $(history -p !!)'
通过将别名的右边指定为$(history -p !!),这就是对shell的说明。
redo 是别名,请评估右侧 =sudo 保持原样并将其连接到...$()是一个shell指令,用于在当前执行过程中执行内容(与sub-shell相对${},后者产生一个不同的过程以在其中执行)history -p !!!!被扩展到history -p <lastCommandHere>作为步骤4的结果。-p部分说history仅打印结果,而不执行sudo,执行剩余的(现在打印输出的同一命令行上),以高特权,假定密码被正确输入这最终意味着该命令history -p !!有效地写出了解决方案,而不是在sudo。之后执行。
注意:这'是重要的。如果您使用",则!!两次对插值进行插值,并且要实现我们的目的,我们需要非常仔细地控制分辨率步骤;bash中的单/双引号
聚苯乙烯
如果您使用zsh+ oh-my-zsh,那么可以使用sudo别名设置_;
_ !!
它将重新运行最后一个命令sudo。但是,如果您在中配置别名~/.zshrc,则alias redo='sudo $(history -p !!)由于解析步骤不同,因此zsh配置中的别名将无法正常工作。
就是说,当从zsh执行别名时,您可以放别名~/.bashrc而不是,~/.zshrc并获得相同的结果redo(假设您正在从bash中对zsh进行脱壳,尽管公认这有点麻烦-尽管是功能性的)。
zsh值得入场的价格:)