必须确定所有用户主目录 - 代字号脚本问题

iar*_*oot 5 bash tilde-expansion

假设someuser有一个主目录/ home/someuser

NAME = SomeUser的

在bash中 - 我用什么表达式组合使用tilde(〜)和$ NAME来返回用户主目录?

HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Pau*_*ce. 16

更安全:

eval HOMEDIRECTORY="$(printf "~%q" "$NAME")"
Run Code Online (Sandbox Code Playgroud)

这里引用和转义危险字符的%q选项printf.

如果$NAME是乔,你会得到类似的东西/home/joe.对于root,你可能会得到/root.对于"abc; rm something"你会得到"〜abc; rm something"而不是删除某些东西.


Ign*_*ams 6

如果您有权访问getent:

getent passwd "$NAME" | cut -d: -f 6
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 0

一种替代方法

awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)