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

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

在 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

答案1

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

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

从手册:

-E, --preserve-env

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

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

sudo FMPEG=yes sbopkg -B -i vice

答案2

sudo在调用给定命令之前清理环境中的变量。您必须要求它保留环境中的变量才能使您的命令正常工作。

此外,您必须在使用( ) 之前export对该变量进行赋值,在调用( )的同一过程中对其进行赋值,或者使用( )。FMPEGsudoexport 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

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

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit

答案3

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

相关内容