Как я могу получить путь к рабочему столу данного пользователя?
Я использовал это:
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
.