sudo使用時の環境変数のロード

sudo使用時の環境変数のロード

次のコマンドを実行すると:

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

mongodbシェルを使用して正常に接続できます。

しかし:

$ 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

bash一重引用符構文を使用するには、文字列をシェルに渡し、公開された変数を介して渡す必要があります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

二重引用符を使用する場合は、ローカルシェルで(コマンドを実行するときに)これらの変数を定義する必要があります。たとえば、次のようになります。

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

変数が正しく定義され検証されたことを確認するには、コマンド全体の前に追加しますecho。変数が空の場合は、まず設定する必要があります。

おすすめ記事