我的脚本中有一个USER
变量,我想HOME
根据该USER
变量查看他的路径。我怎样才能做到这一点?
答案1
有一个实用程序可以查找用户信息,无论该信息是否存储在本地文件(例如/etc/passwd
LDAP 或其他方法)中。它被称为getent
.
为了从中获取用户信息,您可以运行getent passwd $USER
.您将得到一条返回信息,如下所示:
[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash
现在您可以简单地从中删除主目录,例如使用 cut,如下所示:
[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny
答案2
您可以用来eval
获取某人的主目录。
eval echo "~$USER"
至少对于本地用户来说这肯定有效。我不知道像 LDAP 这样的远程用户是否使用eval
.
答案3
通常的地方是/home/$USER
,但这不一定是通用的。搜索此类信息的最终位置是在文件内/etc/passwd
。
该文件是世界可读的(任何人都可以读取它),因此任何用户都可以访问其内容。
如果文件中存在 $USER,则倒数前一项是用户主目录。
这将选择条目并打印主目录:
awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"
对于更复杂的(远程)系统,getent 是从 NSS(名称服务交换库)系统获取用户信息的常用命令。
一个命令
getent passwd "$USER" | cut -d : -f 6
将提供同等信息(如果有)。
答案4
如果您以 root 身份登录,如果您知道USER
的密码,或者没有USER
密码,则以下是另一个选项:
su -c 'echo ~' ${USER}
在标准su
行为下,如果USER
未定义或为空,su
则将尝试以 root 身份运行该命令。
如果 的值USER
不是有效的用户名,则会引发相应的错误:su: user <user> does not exist
。
这里已经有很多好的答案,但这可能仍然对某人有帮助。