如何使用超级用户命令获取我想要的环境变量?

如何使用超级用户命令获取我想要的环境变量?

我正在运行 OpenSuse 12.1 KDE。我之前运行的是 Ubuntu。在 Ubuntu 中,有一个超级用户选项 ( sudo -s),用于保留原始用户的HOME环境变量(还有另一个选项,sudo -i,用于设置目标用户的HOME环境变量)。

我希望在 OpenSuse 中拥有相同的功能。但是,默认情况下,susudo尝试过的每个变体都会将HOME环境变量设置为目标用户的值。

有人能给我提供实现以下任一变体(即别名或类似的东西)的精确步骤吗susudo

  • 保留原始用户的HOME环境变量
  • 将原始用户的PATH环境变量与目标用户的PATH环境变量结合起来
  • 否则,工作方式与sudo -s在 Ubuntu 或suOpenSuse 中类似。

我希望尽可能少地更改默认配置,并且希望能提出一个脚本来实现这个小更改,以便当我升级时,我可以以最小的中断/努力恢复我的配置。

答案1

您可以在命令行上将环境变量传递给 sudo 环境:

sudo env HOME=$HOME PATH=$PATH <command>

因为变量替换首先发生,所以变量的当前版本在命令行上被替换,然后env在新环境中使用该命令运行,然后<command>执行。

然而,这不符合您合并路径的第二个标准,但您可以将其包装在脚本中,并将您想要的路径准确传递到环境中sudo。系统级路径不会发生太大变化,尤其是考虑到您尽可能保留原始路径的方法。因此,在您的脚本中,您可以设置一个新的路径变量,然后转到 sudo:

#!/bin/bash
PATH2=$PATH:/usr/sbin:/sbin
sudo env PATH=$PATH2 HOME=$HOME $@

也许可以将其称为“mysudo”,您甚至可以在 bash 配置文件中sudo使用别名mysudo,这样您的打字肌肉记忆sudo仍然有效。

相关内容