Я пишу сценарий, и мне нужно найти папку на рабочем столе текущего пользователя. Я хочу, чтобы он не зависел от языка, поэтому я обнаружил, что в Ubuntu вы можете найти путь к рабочему столу (независимо от языка системы) в~/.config/user-dirs.dirs
в строке, начинающейся с тегаXDG_DESKTOP_DIR
.
Я могу легко получить эту информацию, используяDESK=$(more ~/.config/user-dirs.dirs | grep "XDG_DESKTOP_DIR" | cut -d '"' -f2)
и получить путь к рабочему столу, но проблема в том, что я получаю что-то вроде этого:$HOME/Desktop
и мне нужно расширить переменную $ HOME.
Я делал это сeval
но я знаю, что это плохой код, поэтому решил его изменить.
Итак, в основном я пытаюсь расширить переменную, которая находится внутри переменной, которая содержит смесь текста и переменных. Я хотел бы иметь решение, которое не было бы жестко запрограммировано для$HOME
переменная, потому что я не впервые сталкиваюсь с этой проблемой.
Я уже пробовал${!DESK}
,${${DESK}}
(Я могу представить, почему это не работает),[[ ${escri} ]]
и другие в сочетании сecho -e
.
Я был бы очень благодарен, если бы кто-нибудь мог помочь мне с этой проблемой, поскольку я помню, что у меня уже была эта проблема при первом написании кода, поэтому я сдался и использовал злойeval
.
Самый полезный способ - найти~/.config/user-dirs.dirs
. ~/.config/user-dirs.dirs
# Variable is now readily available
echo "$XDG_DESKTOP_DIR"
Другой способ - использоватьenvsubst
чтобы развернуть переменные среды перед анализом файла:
desktop_dir="$(
envsubst < ~/.config/user-dirs.dirs |
sed -n 's/XDG_DESKTOP_DIR="\(.*\)"/\1/p'
)"
envsubst
проголосовало за. кое-что узнал из этого. Jetchiselenvsubst
потому что я делаю больше манипуляций, используя содержимое этого файла. Большое спасибо! Aleix Mariné