4 votes

Comment obtenir le "chemin du bureau" d'un utilisateur donné

Comment puis-je obtenir le chemin d'accès au bureau d'un utilisateur donné ?

J'ai utilisé ça :

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

Y en a-t-il de meilleurs ?

Et si le nom du bureau de l'utilisateur n'est pas "Desktop" ?

Merci !

p.s. : j'utilise Fedora 14 mais existe-t-il des méthodes "générales" pour trouver le bureau d'un utilisateur donné ?

6voto

Nathan Lee Points 1127

Essayez xdg-user-dirs .

Cette page contient un exemple qui devrait fonctionner pour l'utilisateur actuel :

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

Aussi, si vous devez lire /etc/passwd il est préférable d'utiliser la sortie de l'application getent passwd car certaines données utilisateur peuvent être stockées dans NIS, LDAP ou une autre base de données.

En combinant cela pour que cela fonctionne pour un utilisateur appelé 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}"

2voto

jason saldo Points 5036

Votre commande est incroyablement complexe.

Voici une version simplifiée :

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

Voici une version démêlée de votre original :

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

ou

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

1 votes

Et si le nom du bureau de l'utilisateur n'est pas "Desktop" ?

1voto

lbonn Points 111

Le site xdg-user-dir peut vous aider :

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

Cela ne fonctionne comme ça que si vous êtes connecté en tant qu'utilisateur. Vous pouvez le tromper en spécifiant XDG_CONFIG_HOME :

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

Si vous regardez le script lui-même, il fait à peu près la même chose que le snippet dans la réponse de Mikel.

0voto

user235832 Points 11

Le chemin est $HOME/Desktop

testé par echo hello > $HOME/Desktop/testing.txt

-1voto

Kevin M Points 2292

Tu rends ça plus complexe que ça ne doit l'être. ~UserName est un alias pour le répertoire personnel de UserName.

Utilisez ~UserName/Desktop .

0 votes

Ils ont spécifiquement demandé une méthode générale et correcte, qui gère également le cas où le répertoire ne s'appelle pas "Desktop".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X