我经常忘记运行命令sudo.我正在寻找一种方法来制作一个bash函数(或别名)来重复最后一个命令sudo.就像是:
S() {
sudo $(history 1)
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
jm6*_*666 23
不够?
sudo !!
Run Code Online (Sandbox Code Playgroud)
如果你想S简单地把:
alias S=sudo
Run Code Online (Sandbox Code Playgroud)
并使用它
S !!
Run Code Online (Sandbox Code Playgroud)
的!!平均last command
Aar*_*nke 17
使用alias redo='sudo $(history -p !!)'.这是我发现的唯一可以使用别名的东西.由于某种原因,其他答案在别名中不起作用,自己尝试过,即使它们在直接运行它们时也能正常工作.
添加和扩展aaron franke的响应(这是正确的但缺乏原因),以便redo在配置别名后只需键入即可alias redo='sudo $(history -p !!);
这是我发现的唯一可以使用别名的东西
有一些事情发生在那个授权解释上。
alias redo='sudo !!'
Run Code Online (Sandbox Code Playgroud)
不起作用,因为它不执行该sudo部分,尽管它确实解决了!!.
要sudo !!正确解析 ,shell 解析指令必须执行并与sudo. 我们这样做;
alias redo='sudo $(history -p !!)'
Run Code Online (Sandbox Code Playgroud)
通过将别名的右侧指定为$(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设置别名_;
_ !!
Run Code Online (Sandbox Code Playgroud)
这将重新运行最后一个命令作为sudo. 但是,如果您在 中配置别名~/.zshrc,alias redo='sudo $(history -p !!)由于解析步骤不同,zsh 配置将无法正常工作。
也就是说,当从 zsh执行别名时,您可以将别名放入~/.bashrc而不是~/.zshrc并获得相同的结果redo(假设您是从 bash 对 zsh 进行子壳,尽管这确实有点麻烦 - 尽管是功能性的)。
| 归档时间: |
|
| 查看次数: |
23682 次 |
| 最近记录: |