我写了一个bash脚本,我使用Platypus变成了一个应用程序。我选择了Platypus,所以我可以轻松使用Droplet选项。
基本思路是从用户那里获取一个zip文件,解压缩文件,排除我们不会使用的几个文件,重新压缩新文件并将它们移动到桌面上的文件中。当我运行应用程序时,脚本不会等待用户删除文件。它运行并发出错误,没有找到.zip。
我有几个问题。
如何让我的应用程序等待将zip文件放在Droplet上?
文件在哪里由Platypus存储,如何在脚本中调用它?
这是我到目前为止所做的。
unzip *.zip -x *.cpg *.xml *.txt -d Processed
cd NavtecProcessed
zip -r * *
echo "Cleaning up your mess"
mkdir ~/Desktop/Final/
mv ./*zip ~/Desktop/Final/
sleep 2
cd ..
rm -r NavtecProcessed*
echo "All done!"
从数据文件夹在终端中运行时,脚本可以正常工作。任何帮助/指导将不胜感激。
答案 0 :(得分:2)
您可能需要对脚本进行一些小的调整,以使其与Platypus Droplet处理删除文件的方式兼容。
这里有关于液滴如何工作的细分:
因此问题的解决方案是重构脚本来处理传递的参数。您可以在bash中使用$#
作为参数总数,并使用$1, $2, $3
...等其他参数。您也可以使用$*
来使用所有参数。
这是一个示例脚本,它将输出Droplet看到的传递文件的文件名(在applescript警报中)。请注意,如果传递了0个参数($# -eq 0
),则退出if语句:
#!/bin/sh
if [ $# -eq 0 ]
then
exit 0
fi
`/usr/bin/osascript << EOT
tell app "System Events"
display dialog "$# argument(s): $*"
end tell
EOT`
正如您所说,您的脚本当前似乎对您当前所在的文件夹进行操作。一个简单的mod可能满足您的需求:
if [ "$#" -ne 1 ]
then
exit 0
fi
cd $1
unzip *.zip -x *.cpg *.xml *.txt -d Processed
cd NavtecProcessed
zip -r * *
echo "Cleaning up your mess"
mkdir ~/Desktop/Final/
mv ./*zip ~/Desktop/Final/
sleep 2
cd ..
rm -r NavtecProcessed*
echo "All done!"
此脚本将删除的文件夹,cd放入其中,然后执行原始脚本。如果没有通过一个参数(文件夹),那么它什么都不做。
:)希望这有帮助!