![在 sudo 下重新运行上一个命令](https://linux22.com/image/1110966/%E5%9C%A8%20sudo%20%E4%B8%8B%E9%87%8D%E6%96%B0%E8%BF%90%E8%A1%8C%E4%B8%8A%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4.png)
我希望能够运行一个命令,但由于没有适当的权限,它失败了。然后我可以写“please”来 sudo 我刚刚运行的命令。
以下是我想要在终端中执行的操作:
$ run command
"you don't have access to do that"
$ please
"ran successfully"
我看到它!!
会抓取前一个命令,所以我想我可以使用它,但我无法让它工作。
我的 please.sh shell 脚本看起来像这样,但我无法让其中任何一个工作。它只是说“未找到命令!!”并打印出 sudo 用法。
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
答案1
添加到你的.zshrc:
alias please='sudo $(fc -ln -1)'
答案2
您不能!!
在 shell 脚本中使用,因为您无法在子 shell 中访问父 shell。虽然我建议使用sudo !!
,但如果您真的想制作 BASH 脚本,则必须使用 .bash_history,如下所示:
#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`
这绝对不是一个完美的解决方案,但应该可以解决问题。如果你使用的是 ZSH,这将不起作用,因为 ZSH 不会输出到 .bash_history(据我所知)。 更新:这是一个可以与 ZSH 兼容的版本:
#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`
希望这可以帮助!
如果您不理解该脚本,它只是使用 sudo 运行在 BASH 中输入的最后一个命令。