1

我写了一个 bash 脚本,我用 Platypus 把它变成了一个应用程序。我选择了鸭嘴兽,所以我可以轻松地使用水滴选项。

基本思想是从用户那里获取一个 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!"

该脚本从数据文件夹在终端中运行时有效。任何帮助/指导将不胜感激。

4

1 回答 1

2

您可能需要对脚本进行一些小的调整,以使其与鸭嘴兽小滴处理丢弃文件的方式兼容。

以下是有关液滴工作原理的细分:

  • 首次启动应用程序时,脚本将运行一次
  • 当您将文件拖放到液滴中时,脚本将以拖放的文件作为参数运行

所以问题的解决方案是重构你的脚本来处理传递的参数。您可以在 bash 中通过使用$#参数总数来执行此操作,并$1, $2, $3在其余参数中使用……等。您还可以使用$*来使用所有参数。

这是一个示例脚本,它将输出 droplet 看到的传递文件的文件名(在 applescript 警报中)。$# -eq 0请注意如果传递了 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`

正如您所说,您的脚本当前似乎在您当前所在的文件夹上运行。一个可能适合您需求的简单模式是:

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 放入其中,然后执行您的原始脚本。如果没有传递一个参数(文件夹),那么它什么也不做。

:) 希望这可以帮助!

于 2013-06-30T21:22:29.287 回答