我怎样才能将sudo之前存在的whoami变成变量?

时间:2019-06-09 20:17:43

标签: bash

基本上,我相信Bruno Bronosky在这里的回答可以回答我的问题...

How do I redirect output to a variable in shell?

...但是他编写代码的方式使我感到困惑。

我需要的是这个

  1. 我有一个卖方专有的脚本(small_script),该脚本实际上是关于哪个用户运行该脚本(仅已登录的用户)的。

  2. 我写了一个较大的脚本来帮助在Linux上安装,我希望我的large_script调用此small_script。

  3. 我的large_script必须由sudo调用(由于它安装了一堆软件)

  4. 如果由sudo或root执行,Small_script拒绝执行

  5. 可能的解决方案是使用变量:

    myuser=$(whoami)
    sudo -Hu ${myuser} ./small_script.sh
    

    这行不通,因为自从我对命令执行命令后,whoami就以root身份报告了

  6. 因此,我需要设置一个变量($ myuser),其输出是whoami的输出之前,我可以运行这些代码行,以便看起来当前登录的用户是真正的人执行代码。

同样,用户Bruno Bronosky似乎有正确的主意,但我对他的回答感到很困惑:

# my example above as a oneliner
series | of | commands | (read string; mystic_command --opt "$string" /path/to/file) | handle_mystified_file

无效的代码:

  1. sudo -Hu '# 1000' ./small_script.sh
    

    可以,但是我需要它在当前登录的用户(可能不是userid 1000)上运行。

  2. sudo -Hu $USER ./script.sh
    

    此操作无法运行,并给出一个错误,认为用户名为空。

  3. myuser=$(whoami)
    sudo -Hu ${myuser} ./script.sh
    

    这会误以为它是根。

1 个答案:

答案 0 :(得分:1)

幸运的是,sudo为环境变量(SUDO_USERSUDO_UID)提供了相关的用户信息,以适应这种情况。您应该可以使用:

sudo -Hu "$SUDO_USER" ./script.sh

顺便说一句,请忽略Bruno Bronosky对另一个问题的回答。他将竭尽全力来满足“重定向”的要求,而不是实际完成预期目标的其他操作。