我希望能够运行一个命令,它失败了,因为它没有适当的权限。然后我可以写“请”来sudo我刚刚运行的命令。
这是我想在终端中执行的操作:
$ run command
"you don't have access to do that"
$ please
"ran successfully"
Run Code Online (Sandbox Code Playgroud)
我看到它!!会抓取上一个命令,所以我想我可以使用它,但我无法让它工作。
我的 please.sh shell 脚本看起来像这样,但我无法让其中的任何一个工作。它只是说“找不到命令!!” 并打印出 sudo 用法。
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
Run Code Online (Sandbox Code Playgroud)
小智 27
添加到您的 .zshrc:
alias please='sudo $(fc -ln -1)'
Run Code Online (Sandbox Code Playgroud)
您不能!!在 shell 脚本中使用,因为您无法在子 shell 中访问父 shell。虽然我建议使用sudo !!,但如果你真的想制作一个 BASH 脚本,你就必须使用 .bash_history,如下所示:
#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`
Run Code Online (Sandbox Code Playgroud)
这绝对不是一个完美的解决方案,但它应该可以解决问题。如果您使用的是 ZSH,这将不起作用,因为 ZSH 不会输出到 .bash_history(据我所知)。 更新:这是一个应该与 ZSH 一起使用的版本:
#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
如果您不理解该脚本,它只会运行在 BASH 中使用 sudo 输入的最后一个命令。