如何获得给定用户的“桌面path”

我如何获得给定用户桌面的path?

我用这个:

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,但有没有“一般”的方法来找出给定的用户桌面?

尝试xdg-user-dirs 。

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

 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}" 

你的命令是非常复杂的。

这是一个简化的版本:

 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 

path是$HOME/Desktop

通过echo hello > $HOME/Desktop/testing.txttestingecho hello > $HOME/Desktop/testing.txt

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

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

如果你以用户身份login,它只能这样工作。 你可以通过指定XDG_CONFIG_HOME来欺骗它:

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

如果你看这个剧本本身,它和米克尔的答案中的片段大体上是一样的。

你正在变得更加复杂。 ~UserName是UserName的主目录的别名。

使用~UserName/Desktop