
次のコマンドを実行すると:
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
。変数が空の場合は、まず設定する必要があります。