如何获取指定用户的“桌面路径”

如何获取指定用户的“桌面路径”

我如何获取给定用户桌面的路径?

我用的是这个:

echo $(awk "NR==$(awk 'BEGIN {FS=":"} {print $3}' /etc/passwd | awk "/^$(id -u USERSNAMEHERE)$/ {print NR}")" /etc/passwd | awk 'BEGIN {FS=":"} {print $6}')/Desktop

还有更好的吗?

如果用户桌面的名称不是“桌面”怎么办?

谢谢你!

ps:使用 Fedora 14 但是有没有“通用”方法来找出给定的用户桌面?

答案1

尝试xdg-用户目录

该页面有一个适用于当前用户的示例:

test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \
    source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
echo ${XDG_DESKTOP_DIR:-$HOME/Desktop}

此外,如果您必须阅读/etc/passwd,最好使用的输出getent passwd,因为某些用户数据可能存储在 NIS、LDAP 或其他数据库中。

将它们组合起来,以便为名为的用户工作USERSNAMEHERE

USER=USERSNAMEHERE
USERDIR=$(getent passwd $USER | cut -f 6 -d :)
USERDIRCONF=${XDG_CONFIG_HOME:-$USERDIR/.config}/user-dirs.dirs
test -f "$USERDIRCONF" && . "$USERDIRCONF"
echo "${XDG_DESKTOP_DIR:-$USERDIR/Desktop}"

答案2

您的命令极其复杂。

以下是简化版本:

getent passwd USERNAME | awk -F: '{print $6 "/Desktop"}'

以下是原始版本的简化版本:

awk -v "id=$(id -u USERNAME)" -F: '{if ($3 == id) print $6 "/Desktop"}' /etc/passwd

或者

awk -v "name=USERNAME" -F: '{if ($1 == name) print $6 "/Desktop"}' /etc/passwd

答案3

xdg-user-dir实用程序可以帮助您:

$ xdg-user-dir DESKTOP
/home/user/Desktop

只有以用户身份登录时,它才会这样工作。你可以通过指定以下内容来欺骗它XDG_CONFIG_HOME

$ XDG_CONFIG_HOME=/home/user xdg-user-dir DESKTOP
/home/user/Desktop

如果你看一下脚本本身,它大致与 Mikel 的回答中的片段做了相同的事情。

答案4

你把它弄得比实际更复杂了。~UserName是 UserName 主目录的别名。

使用~UserName/Desktop

相关内容