为什么这个linux命令会影响环境变量?

时间:2013-09-10 02:54:58

标签: linux bash environment-variables

当我使用

将当前用户更改为管理员时
sudo su admin

我发现环境变量也发生了变化。我打算做的是将我的用户更改为admin,并且env未更改

然后我找到了如下命令:

sudo bash -c "su - admin"

这个命令确实是我想要的,但是我用Google搜索了bash -c,并且不知道为什么这个命令能为我做到这一点。谁能给我一个明确的解释?非常感谢。

2 个答案:

答案 0 :(得分:1)

首先你应该阅读sudo联机帮助页并在/ etc / sudoers文件中设置这些选项,或者你可以以交互方式进行(见下面的第二篇)。

除非您设置配置选项,否则

默认的sudoers文件可能无法保留现有的$ USER环境。您需要阅读env_reset,因为根据您的操作系统分布,sudo配置在大多数情况下会有所不同。

我不是故意要简洁,而是我在移动设备上..

我建议不要使用sudo su ..谁与公众分享sudo su是一个新手,你可以用sudo完成同样的清洁工。

以您的示例为例,您正在开始由原始用户(“非管理员”)拥有的子shell。你使用-c“字符串”启动子shell使用-s使用-s的shell的-c的equivelant,它从传递给-s的arg或passwd文件中定义的shell中读取shell。

第二,你应该使用:

    $ sudo -u admin -E -s

更干净吧? :)

    -u sets the user, obviously 
    -s we just explained
    -E preserves the orig user env 

自己看看

    $ echo $HOME    # should show the original users /home/orig_user
    $ env

你的原始环境保存完好,没有任何sudo suggliness。

如果您对模拟用户登录感兴趣而不保留env ..

    $ sudo -u user -i 

或root:

可能需要-E取决于发行版sudoers文件

    $ sudo -s 

    $ sudo -i 

    -i simulates the login and uses the users env.

希望这会有所帮助,并且有人会将其格式化为更具可读性,因为即时通讯在我的手机上。

答案 1 :(得分:0)

带有-c参数的bash定义如下。

-c string

如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。

谢谢&问候,
阿洛克