Как экспортировать переменную для использования с sudo?


24

В Slackware использование sbopkgпозволяет создавать пакет из исходного кода. Репо не такой большой, как Debian, но это приятно.

Некоторое программное обеспечение может использовать переменные среды, например, в эмуляторе VICE c64, если для переменной FFMPEGзадано значение yes, это позволит ffmpegзаписывать эмулятор.

Я пытался использовать

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

но ffmpegотключен.

Вместо этого я должен был использовать

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

который работает.

Как использовать переменные окружения с sudo?

Ответы:


39

Вы можете использовать -Eопцию sudo :

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

Из руководства:

-E, --preserve-env

Указывает политике безопасности, что пользователь желает сохранить свои существующие переменные среды. Политика безопасности может возвращать ошибку, если у пользователя нет разрешения на сохранение среды.

Обратите внимание, что это экспортирует все ваши существующие переменные среды. Безопаснее экспортировать только необходимые переменные среды со следующим синтаксисом :

sudo FMPEG=yes sbopkg -B -i vice


Спасибо, но это не работает (опция.-E), другая строка в порядке, так как первый ответ я выбираю как правильный.
Эльбарна

11

sudoочищает переменные в среде перед вызовом данной команды. Вам нужно будет попросить его сохранить переменные в среде, чтобы ваша команда работала.

Кроме того, вы должны будете exportв FMPEGпеременной перед использованием sudo( export FMPEG=yes; sudo), назначать его в том же ходу , как вызов sudo( FMPEG=yes sudo), или использование env( env 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

7

обратите внимание, что: (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, это нам небезопасно, так как это приведет к утечке всевозможных неожиданных переменных.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.