如何在内部sudo-bash脚本中访问$ USER?

时间:2018-12-03 13:27:36

标签: bash shell command-line terminal

我有一个像这样的简单脚本可以写入文件:

#!/bin/bash
sudo bash -c 'cat <<EOT >> foo/bar.txt
  Hello ${USER}
EOT'

当我运行它时,foo/bar.txt的内容是:

Hello root

我的用户名:

$ whoami
timo

所以我希望它输出“ Hello timo”。尽管“ Hello root”的结果确实有意义,因为我是通过sudo命令运行它的。

是否可以通过某种方式访问​​“外部bash”的用户名,因此它输出“ Hello timo”而不是“ Hello root”?


更新 2018-12-04

我想指出的是,在打开这个问题之前,我看到了other post,并且那里的建议没有用(who am ilogname)。唯一有效的选项是kvantour使用${SUDO_USER}从该线程接受的答案。在另一篇文章中,有人建议这行不通:

  

$SUDO_USER doesn't work if you are using sudo su -

因此,无需对imho进行投票。

2 个答案:

答案 0 :(得分:2)

您可能想尝试:

#!/usr/bin/env bash
sudo bash -c 'cat - <<EOF >> foo/bar.txt
  Hello ${SUDO_USER}
EOF'
  

sudo使用以下环境变量:

     
      
  • SUDO_GID设置为调用sudo的用户的组ID。
  •   
  • SUDO_USER设置为调用sudo的用户的登录名。
  •   
     

来源:man sudo

如果您不能使用SUDO_USER,而必须使用USER,则必须将解析的字符串双引号括起来bash。双引号仍将替换变量:

#!/usr/bin/env bash
sudo bash -c "cat - <<EOF >> foo/bar.txt
  Hello ${USER}
EOF"

答案 1 :(得分:-2)

这应该对您有用。将${USER}替换为:

$(who -m | cut -d' ' -f1)

who -m提供了更多登录信息,这就是剪切第一字段的原因