Получить путь к папке с applecript, повторно использовать его в файле .sh - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать сценарий рабочего процесса, который может использоваться несколькими пользователями.Пользователь должен указать местоположение для папки dropbox, путь которого должен быть повторно использован в shell и applecript.

Цель рабочего процесса - автоматизировать настройку отслеживаемой папки, отслеживающей изменения файлов (с помощью launchd).При обнаружении изменения должен быть запущен сценарий оболочки, который запускается: npm run generate в родительской папке просматриваемого файла.

Мне удалось создать рабочий процесс с файлом .sh и локальными путями, но теперь яхотите обновить его, чтобы пути, которые запускает скрипт, должны были быть выбраны пользователем, поскольку эти пути различаются для каждого пользователя.См. Шаги для рабочего процесса

  1. Выберите расположение папки dropbox
  2. Создайте файл сценария исполняемой оболочки в этой папке
  3. Добавьте код в этот файл

3a: добавить яблочный скрипт, который использует путь к выбранной папке для запуска команды npm
3b: создать файл запуска в папке пользователей LanchAgents (только для пользователей Mac)
3c: добавить содержимое в этот файл запускас путем выбранной папки

launch launchd file.
    touch ~/Dropbox\ \(Folder\ name\)/folder/generate-icon-script.sh && echo "
    osascript -e 'tell application \"Terminal\"
            do script \"cd ~/Dropbox\\\ \\\(Folder\\\ name\\\)/folder/ && /usr/local/bin/npm run generate\"
            delay 10
            quit
        end tell'"  >> ~/Dropbox\ \(Folder\ name\)/folder/generate-icon-script.sh 
    && chmod a+x ~/Dropbox\ \(Folder\ name\)/folder/generate-icon-script.sh 
    && touch ~/Library/LaunchAgents/com.icons.daemon.plist 
    && echo "

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>Label</key>
            <string>com.icons.daemon.plist</string>
            <key>ProgramArguments</key>
            <array>
                <string>sh</string>
                <string>-c</string>
                <string>~/Dropbox\\ \\(Folder\\ name\\)//folder/generate-icon-script.sh</string>
            </array>
            <array>
                <string>~/Dropbox (Folder name)/folder/input</string>
            </array>
        </dict>
    </plist>
    " >> ~/Library/LaunchAgents/com.icons.daemon.plist &&
    launchctl load ~/Library/LaunchAgents/com.icons.daemon.plist

Чтобы позволить пользователю определить путь, я создал appleScript, который предлагает пользователю выбрать правильное расположение папки dropbox.Мне удалось создать файл .sh в папке dropbox и отобразить в нем некоторое содержимое.Проблема, с которой я сталкиваюсь, заключается в том, что путь, который я сохраняю, не может быть использован в терминале.

set myLocation to (choose folder with prompt "Choose the location to the Icons Folder") # Get location to save the file
set myLocationPOSIX to the POSIX path of myLocation
do shell script "touch " & quoted form of myLocationPOSIX & "/test.sh"
do shell script "chmod a+x " & quoted form of myLocationPOSIX & "/test.sh"
do shell script "echo cd " & quoted form of myLocationPOSIX & " \\&\\& /usr/local/bin/npm run generate >> " & quoted form of myLocationPOSIX & "test.sh"

Как сохранить путь, чтобы его можно было использовать в моем рабочем процессе?Любая помощь будет сильно зашифрована!

Я ожидаю, что результат эха будет: cd Users/name/Dropbox\\ \\(Folder\\ name\\ )/folder/ && /usr/local/bin/npm run generate

Но я получаю: cd /Users/name/Dropbox (Folder name)/folder/ && /usr/local/bin/npm run generate

Любая помощь будет оченьоценили!

1 Ответ

0 голосов
/ 01 июля 2019

То, что вы хотите в оболочке, я думаю, это либо:

/Users/name/Dropbox\ (Folder\ name)/folder/

, либо это:

'/Users/name/Dropbox (Folder name)/folder/'

Любой из них будет проанализирован правильно.То, что вы получаете сейчас, это последнее, через quoted form of myLocationPOSIX.Это должно работать, даже если вы не видите, что вы ожидаете.Получение первого выполнимо, используя разделители текстовых элементов, но это немного PITA:

set tid to text item delimiters
set text item delimiters to " "
set piecesList to text items of myLocationPOSIX
set text item delimiters to "\\ "
set newLocationPath to piecesList as text
set text item delimiters to tid 

Этот код разбивает путь к местоположению в пробелах, а затем снова соединяет его вместе, используя '\'.Выполняет работу, но это не красиво ...

Есть ли какая-то конкретная причина, по которой вам нужно избегать отдельных пробелов, а не заключать в кавычки весь путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...