通过用户名获取主目录


84

我想获取任何具有echo的用户的主目录

echo ~puchuu
>> /home/puchuu

但是我不能使用变量

echo ~$USER
>> ~puchuu
echo `echo ~$USER`
>> ~puchuu

Answers:


86

您可以使用eval

eval echo ~$USER

但是请在下面查看Andrew的评论和glenn的回复。


8
在bash中eval并不需要就echo ~$username可以了,但在
shval中

有时这会给出错误的值,也许是先前使用相同用户名的帐户的主文件夹?
安德鲁

@AndrewMacFie:“上一个”是什么意思?
choroba

1
@choroba添加用户,删除用户,然后添加具有相同用户名的用户。如果用户的主文件夹第二次不同,则此命令将提供原始主文件夹,而不是当前主文件夹。glenn jackman的答案给出了当前答案。
安德鲁

还要注意,如果您eval echo "~$USER"假设$USER不包含shell可能解释的特殊字符。例如,如果是USER="foo\$bar",那么当我们eval使用shell时,它将替换$bar为您不需要的输出。基本上,如果您采用这种方法,则需要确保$USER输入正确。大多数时候可能会,但是您应该记住这一点。
Zorawar

65

这可能对您有用:

homedir=$( getent passwd "$USER" | cut -d: -f6 )

这也适用于不是您的用户。例如,

homedir=$( getent passwd "someotheruser" | cut -d: -f6 )

这是合法的,getenv而不是假设passwd房屋的位置比假设房屋的位置更进一步/home/
Evan Carroll

13

看来您就是那个用户-为什么不

echo $HOME


3
如果您在sudo'ed环境中并且未通过sudo -H或-i标志,则此方法将不起作用-$ HOME仍将是先前(sudo'ing)用户的主目录。
Asfand Qazi 2015年


0

登录后,运行cd进入您的主目录,然后运行pwd以打印工作目录。


那是行不通的。这里的想法是在shell脚本中执行此操作,并且大概不需要相关用户的凭据...
SamB

出于相同的原因SamB提到-1。我编辑了您的答案,因为我希望您了解如何使用Markdown格式,并且更加简洁。您还错过了更简单的方法,即echo $HOME
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.