![sudo 사용 시 환경 변수 로드](https://linux55.com/image/99225/sudo%20%EC%82%AC%EC%9A%A9%20%EC%8B%9C%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%20%EB%A1%9C%EB%93%9C.png)
다음 명령을 실행하면:
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
. 변수가 비어 있으면 먼저 설정해야 합니다.