使用 sudo 时加载环境变量

使用 sudo 时加载环境变量

如果我执行以下命令:

sudo -i
mongo -u $MDBUSER -p $MDBPASSWORD

我可以使用 mongodb shell 成功连接。

然而:

$ sudo 'mongo $MAUTH -u $MUSER -p $MPASS'
sudo: mongo $MAUTH -u $MUSER -p $MPASS: command not found

$ sudo -i mongo $MAUTH -u $MUSER -p $MPASS
Error parsing command line: the required argument for option '--username' is missing

我在这里做错了什么?

答案1

要使用单引号语法,您需要将字符串传递到bashshell 并通过 公开变量env,例如

$ sudo env MDBAUTH="$MDBAUTH" MDBUSER="$MDBUSER" MDBPASSWORD="$MDBPASSWORD" \
    bash -c 'mongo "$MDBAUTH" -u "$MDBUSER" -p "$MDBPASSWORD"'

以下是其他几个例子:

$ sudo -i env FOO=FOO BAR=BAR bash -c 'grep -e FOO -e BAR <(set)'
BAR=BAR
BASH_EXECUTION_STRING='grep -e FOO -e BAR <(set)'
FOO=FOO
SUDO_COMMAND='/bin/sh -c env FOO=FOO BAR=BAR bash -c grep\ -e\ FOO\ -e\ BAR\ <(set)'
$ sudo env FOO=FOO BAR=BAR bash -c 'echo $FOO $BAR'
FOO BAR

使用双引号时,您需要在本地 shell 中定义这些变量(在运行命令时),例如:

sudo -i mongo "$MDBAUTH" -u "$MDBUSER" -p "$MDBPASSWORD"

要查看变量是否已正确定义和解析,请在整个命令前面加上echo.如果变量为空,则需要先设置它们。

相关内容