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


24

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합니까?

답변:


39

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

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

매뉴얼에서 :

-E, --preserve-env

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

참고이 수출하는 모든 기존 환경 변수. 다음 구문으로 필요한 환경 변수 만 내보내는 것이 더 안전합니다 .

sudo FMPEG=yes sbopkg -B -i vice


고맙지 만 작동하지 않습니다 (.-E 옵션) 다른 줄은 괜찮으므로 첫 번째 대답은 올바른 것으로 선택하기 때문입니다.
elbarna

11

sudo주어진 명령을 호출하기 전에 환경의 변수를 삭제합니다. 명령이 작동하려면 환경의 변수를 유지하도록 요청해야합니다.

또한, 당신이해야합니다 사용하기 전에 변수 ( )를 호출하는 것과 같은 이동에 할당 ( ) 또는 사용 ( ).exportFMPEGsudoexport 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

6

참고 : (export a=b; command)는와 같습니다 a=b command. 괄호에 유의하십시오.

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

보안 경찰이이를 방지 할 경우 : sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(를 사용하지 않으면 -E모든 종류의 예기치 않은 변수가 유출되므로 안전 하지 않습니다 .)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.