如何导出变量以与 sudo 一起使用?

elb*_*rna 33 sudo environment-variables

在 Slackware 上,使用sbopkg允许从源代码构建一个包。Repos 没有 Debian 大,但它很好。

一些软件可以使用环境变量,例如在VICE c64模拟器上,如果变量 FFMPEG设置为yes,就会启用ffmpeg录制模拟器。

我试着用

$ export FFMPEG=yes; sudo sbopkg -B -i vice
Run Code Online (Sandbox Code Playgroud)

ffmpeg被禁用。

相反,我不得不使用

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice
Run Code Online (Sandbox Code Playgroud)

哪个有效。

如何使用环境变量sudo

xhi*_*nne 53

您可以使用 sudo 的-E选项:

FMPEG=yes sudo -E sbopkg -B -i vice
Run Code Online (Sandbox Code Playgroud)

从手册:

-E, --preserve-env

向安全策略指示用户希望保留其现有环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。

请注意,这会导出所有现有的环境变量。使用以下语法仅导出您需要的环境变量更安全

sudo FMPEG=yes sbopkg -B -i vice


Kus*_*nda 13

sudo在调用给定命令之前清理环境中的变量。您将不得不要求它保留环境中的变量以使您的命令正常工作。

此外,您必须在使用( )之前exportFMPEG变量进行赋值,在调用( ) 或使用( ) 的过程中为其赋值。sudoexport FMPEG=yes; sudosudoFMPEG=yes sudoenvenv FMPEG=yes sudo

要保留环境变量,请使用-E(或--preserve-env):

$ env FMPEG=yes sudo -E sbopkg -B -i vice
Run Code Online (Sandbox Code Playgroud)

也可以像这样设置特定的环境变量:

$ sudo FMPEG=yes sbopkg -B -i vice
Run Code Online (Sandbox Code Playgroud)

如果由于适当的安全策略而失败,请启动一个 root shell 并在那里设置变量:

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
Run Code Online (Sandbox Code Playgroud)


ctr*_*lor 8

请注意: (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,它不安全,因为它会泄漏各种意外变量。)