sudo와 함께 사용할 변수를 내보내는 방법은 무엇입니까?

sudo와 함께 사용할 변수를 내보내는 방법은 무엇입니까?

Slackware에서 를 사용하면 sbopkg사람들이 소스 코드에서 패키지를 빌드할 수 있습니다. Repos는 데비안만큼 크지는 않지만 여전히 매우 좋습니다.

일부 소프트웨어는 환경 변수를 사용할 수 있습니다(예: VICE c64 에뮬레이터에서 이 변수가 FFMPEG로 설정 yes되면 ffmpeg로깅 에뮬레이터가 활성화됩니다).

나는 사용하려고

$ export FFMPEG=yes; sudo sbopkg -B -i vice

하지만 ffmpeg비활성화되었습니다.

대신에 나는 사용해야했다

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

이것은 작동합니다.

환경변수는 어떻게 사용하나요 sudo?

답변1

sudo의 옵션을 사용할 수 있습니다 -E.

FMPEG=yes sudo -E sbopkg -B -i vice

매뉴얼에서:

-E, --preserve-env

사용자가 기존 환경 변수를 유지하기를 원하는 보안 정책을 나타냅니다. 사용자에게 환경을 보호할 권한이 없으면 보안 정책에서 오류가 반환될 수 있습니다.

이번 수출에 참고하세요모두기존 환경 변수.다음 구문을 사용하여 필요한 환경 변수만 내보내는 것이 더 안전합니다.:

sudo FMPEG=yes sbopkg -B -i vice

답변2

sudo지정된 명령을 호출하기 전에 환경의 변수를 정리합니다. 명령이 제대로 작동하려면 환경에서 변수를 보존하도록 요청해야 합니다.

추가적으로 ()를 사용하기 전에 변수에 값을 할당하거나 export, ()를 호출할 때와 동일한 과정에서 변수에 값을 할당하거나, ()를 사용해야 합니다.FMPEGsudoexport FMPEG=yes; sudosudoFMPEG=yes sudoenvenv FMPEG=yes sudo

환경 변수를 보존하려면 -E(또는 --preserve-env)을 사용하십시오.

$ env FMPEG=yes sudo -E sbopkg -B -i vice

특정 환경 변수는 다음과 같이 설정할 수도 있습니다.

$ sudo FMPEG=yes sbopkg -B -i vice

보안 정책으로 인해 실패하는 경우 루트 셸을 시작하고 거기에 변수를 설정합니다.

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit

답변3

참고: 괄호 (export a=b; command)에 유의 하세요.a=b command

그런 다음 변수를 에 적용하지 않고 sudo직접 적용하면 다음과 같이 할 수 있습니다 sbopkg.FFMPEG=yes sudo sbopkg -B -i vicesudo FFMPEG=yes sbopkg -B -i vice

보안 경찰이 이러한 일이 발생하지 않도록 방지하는 경우: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(사용하지 마십시오 -E. 예상치 못한 모든 변수가 유출될 수 있으므로 안전하지 않습니다.)

관련 정보