Cygwin/bash 上的伪 Sudo

Cygwin/bash 上的伪 Sudo

我需要 sudo 来工作,不是 sudo 本身,而是一种允许 sudo 命令工作的方式描述在这里

这会很棒,但是 sudo 行有额外的参数,例如:

sudo -u user bash -c 'uptime'

如果我使用上面链接中的 bash,我只会得到输出

/usr/bin/sudo: line 3: -u: command not found

有什么办法可以解决这个问题吗?让它从引号开始运行,而不是 -c。

答案1

如果你确定发送的命令总是像这样

sudo -u user command...

那么你的伪 sudo 脚本就可以抛出它的前两个参数:

#!/bin/bash
shift 2
exec "$@"

否则,您必须做一些参数解析:

#!/bin/bash
while getopts :u: opt
do
  # normally you'd process options and arguments here,
  # but in this case just ignore them
done
shift $((OPTIND-1))  # throw out processed options and arguments
exec "$@"

getopts读取并返回命令行选项和参数,直到没有更多选项和参数为止。man bash如果您想了解有关如何处理命令行参数的更多信息,可以在 bash(1) ( )中阅读相关内容。

答案2

这是我在 babun 下使用 sudo 运行 Ansible 的方法:

#!/bin/bash
count=0

for var in "$@"
  do
    (( count++ ))
  done

shift $count
exec "$@"

相关内容