Назад | Перейти на главную страницу

Как получить пользователям «Путь к рабочему столу»

Как я могу получить путь к рабочему столу данного пользователя?

Я использовал это:

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

есть ли лучше?

Что делать, если имя рабочего стола пользователя не "Рабочий стол"?

Спасибо!

p.s .: с использованием 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

В 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

Если вы посмотрите на сам скрипт, он делает примерно то же самое, что и фрагмент в ответе Микеля.

путь $HOME/Desktop

тест echo hello > $HOME/Desktop/testing.txt

Вы делаете это намного сложнее, чем должно быть. ~UserName - это псевдоним домашнего каталога UserName.

Использовать ~UserName/Desktop.