使用applescript获取文件夹路径,并在.sh文件中重复使用它

时间:2019-06-28 11:39:26

标签: bash shell applescript

我正在尝试编写可被多个用户使用的工作流程的脚本。用户需要指定一个保管箱文件夹的位置,该路径需要在shell和applescript中重用。

工作流的目标是自动设置监视文件夹的设置,该文件夹监视文件的更改(借助launchd)。当检测到更改时,应触发运行的shell脚本:npm run generate在监视文件夹的父级中。

我设法使用.sh文件和本地路径来创建工作流,但是现在我想对其进行更新,因此运行脚本的用户需要选择路径,因为这些路径因用户而异。请参阅工作流程的步骤

  1. 选择保管箱文件夹位置
  2. 在该文件夹中创建可执行的shell脚本文件
  3. 向该文件添加代码

3a:添加使用选定文件夹路径运行npm命令的applescript
 3b:在用户LanchAgents文件夹中创建启动文件(仅限Mac用户)
 3c:使用所选文件夹的路径将内容添加到启动的文件中

  1. 启动启动的文件。
    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文件,并向其中回显了一些内容。我面临的问题是我保存的路径无法在终端中使用。

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 :(得分:0)

我想在外壳中想要的就是这个:

/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 

该代码在空格处断开了位置路径,然后使用'\'将其重新连接在一起。完成工作,但这并不漂亮...

您是否有某些特定原因需要转义各个空格而不是引用整个路径?