Як експортувати змінну для використання з sudo?


24

На Slackware, використовуючи sbopkgдозволи, можна створити пакет з джерела. Repos не такий великий, як 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, --резерв. Env

Позначає політиці безпеки, що користувач бажає зберегти існуючі змінні середовища. Політика безпеки може повернути помилку, якщо користувач не має дозволу на збереження навколишнього середовища.

Зауважте, що це експортує всі ваші існуючі змінні середовища. Безпечніше експортувати потрібні змінні середовища із наступним синтаксисом :

sudo FMPEG=yes sbopkg -B -i vice


Дякую, але він не працює (варіант.-E), інший рядок у порядку, тому що першу відповідь я вибираю як правильну.
elbarna

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.