我需要 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 "$@"