在 sudo 下重新运行上一个命令

在 sudo 下重新运行上一个命令

我希望能够运行一个命令,但由于没有适当的权限,它失败了。然后我可以写“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 中输入的最后一个命令。

相关内容