Я пишу скрипт bash для автоматизации процесса сборки. Мне нужно сохранить путь в файле plist настроек и получить его в сценарии оболочки, используя plistbuddy.
Ключ ниже указывает путь, где будут храниться архивы, папки на рабочем столе:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>archives_path</key>
<string>$HOME/Desktop/Archives/</string>
</dict>
</plist>
В моем сценарии оболочки я доступа к ключу:
SETTINGS_PATH="path/to/plist/file"
ARCHIVES=$(/usr/libexec/PlistBuddy -c "Print archives_path" "$SETTINGS_PATH")
#outputs "$HOME/Desktop/Archives/"
mkdir "$ARCHIVES/test/"
#outputs "mkdir: $HOME/Desktop/Archives: No such file or directory"
ARCHIVES
вар не является расширяясь до /Users/*username*/Desktop/Archives/
, как и следовало ожидать.
Я сделал тест, создавая вар с одной и той же строки:
ARCHIVES="$HOME/Desktop/Archives/"
echo "$ARCHIVES"
#expands to "/Users/*username*/Desktop/Archives/"
mkdir "$ARCHIVES/test/"
#creates the 'test' directory
Поскольку этот сценарий будет запускаться под учетной записью пользователя, неизвестно, как я могу заставить $ HOME, чтобы расширить должным образом.
Попробуйте 'mkdir' с опцией' -p'. – Cyrus
@Cyrus 'mkdir -p $ ARCHIVES' создает на рабочем столе папку с именем' $ HOME', содержащую папки 'Desktop/Archives/test /'. – demosp