【发布时间】:2013-12-28 13:43:04
【问题描述】:
我需要以其他用户的身份在该用户的$HOME 目录中执行部分 bash 脚本。但是,我不确定如何确定这个变量。切换到该用户并调用 $HOME 未提供正确的位置:
# running script as root, but switching to a different user...
su - $different_user
echo $HOME
# returns /root/ but should be /home/myuser
更新:
看来问题出在我尝试在脚本中切换用户的方式上:
$different_user=deploy
# create user
useradd -m -s /bin/bash $different_user
echo "Current user: `whoami`"
# Current user: root
echo "Switching user to $different_user"
# Switching user to deploy
su - $different_user
echo "Current user: `whoami`"
# Current user: root
echo "Current user: `id`"
# Current user: uid=0(root) gid=0(root) groups=0(root)
sudo su $different_user
# Current user: root
# Current user: uid=0(root) gid=0(root) groups=0(root)
在 bash 脚本中切换用户和以不同用户身份执行命令的正确方法是什么?
【问题讨论】:
-
你总是可以从 /etc/passwd 中提取它,假设它是一个本地定义的帐户。
-
su - $different_user应该足够了。你确定你甚至登录为myuser。尝试运行id命令进行验证。某些登录 shell 设置为nologin,一旦您以myuser登录,它就会退出。 -
@anubhava 我更新了我的问题以包括我如何创建用户。本质上:
useradd -m -s /bin/bash $different_user. -
请再看看我的回答。我对它进行了大幅更改以完全匹配您尝试做的事情。
-
请不要将
eval或bash -c与变量一起使用。我添加了一个适用于带有 bash 的 Linux/Unix/macOS 系统的答案(即使您没有使用 bash 作为 shell,它也可能有 bash 可用,因为 bashism 无处不在)。 stackoverflow.com/a/53219743/117471 也说明了其他答案的危险。
标签: bash