我有一个像这样的简单脚本可以写入文件:
#!/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 i
和logname
)。唯一有效的选项是kvantour使用${SUDO_USER}
从该线程接受的答案。在另一篇文章中,有人建议这行不通:
$SUDO_USER doesn't work if you are using sudo su -
因此,无需对imho进行投票。
答案 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
提供了更多登录信息,这就是剪切第一字段的原因