在 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
对该变量进行赋值,在调用( )的同一过程中对其进行赋值,或者使用( )。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
如果由于安全策略而失败,请启动 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
,它是不安全的,因为它会泄漏各种意想不到的变量。)