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. 변수가 비어 있으면 먼저 설정해야 합니다.

관련 정보