如何导出变量以用于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

Answers:


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在调用给定命令之前,先清理环境中的变量。您将不得不要求它在环境中保留变量以使您的命令起作用。

此外,在使用()之前,您必须先export对该FMPEG变量进行赋值,然后再调用()或使用()来对其进行分配。sudoexport 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

如果由于适当的安全策略而失败,请启动根shell并在此处设置变量:

$ 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,因为它会泄漏各种意外变量,所以它是不安全的。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.