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
在调用给定命令之前清理环境中的变量。您将不得不要求它保留环境中的变量以使您的命令正常工作。
此外,您必须在使用( )之前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
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)
请注意:
(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
,它不安全,因为它会泄漏各种意外变量。)