我正在尝试编写可被多个用户使用的工作流程的脚本。用户需要指定一个保管箱文件夹的位置,该路径需要在shell和applescript中重用。
工作流的目标是自动设置监视文件夹的设置,该文件夹监视文件的更改(借助launchd)。当检测到更改时,应触发运行的shell脚本:npm run generate在监视文件夹的父级中。
我设法使用.sh文件和本地路径来创建工作流,但是现在我想对其进行更新,因此运行脚本的用户需要选择路径,因为这些路径因用户而异。请参阅工作流程的步骤
3a:添加使用选定文件夹路径运行npm命令的applescript
3b:在用户LanchAgents文件夹中创建启动文件(仅限Mac用户)
3c:使用所选文件夹的路径将内容添加到启动的文件中
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
任何帮助将不胜感激!
答案 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
该代码在空格处断开了位置路径,然后使用'\'将其重新连接在一起。完成工作,但这并不漂亮...
您是否有某些特定原因需要转义各个空格而不是引用整个路径?