1

Platypus を使用してアプリに変換した bash スクリプトを作成しました。Platypus を選択したのは、ドロップレット オプションを簡単に使用できるようにするためです。

基本的な考え方は、ユーザーから zip ファイルを取得し、ファイルを解凍して、使用しないいくつかのファイルを除外し、新しいファイルを再圧縮してデスクトップ上のファイルに移動することです。アプリを実行すると、スクリプトはユーザーがファイルをドロップするのを待ちません。実行すると、.zip が見つからないというエラーが表示されます。

いくつかの質問を聞きたいんです。

zip ファイルがドロップレットに配置されるまでアプリを待機させるにはどうすればよいですか?

ファイルは 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

Platypus ドロップレットがドロップされたファイルを処理する方法と互換性を持たせるために、スクリプトを少し調整する必要がある場合があります。

液滴がどのように機能するかの内訳は次のとおりです。

  • アプリケーションを初めて起動すると、スクリプトが 1 回実行されます。
  • ファイルをドロップレットにドロップすると、ドロップされたファイルを引数としてスクリプトが実行されます

したがって、問題の解決策は、渡された引数を処理するようにスクリプトをリファクタリングすることです。これは、bash$#で引数の総数に使用し$1, $2, $3、残りの引数に … などを使用して行うことができます。$*を使用して、すべての引数を使用することもできます。

以下は、ドロップレットが認識した渡されたファイルのファイル名を (applescript アラートで) 出力するスクリプトの例です。渡された引数が 0 の場合に終了する if ステートメントに注意してください ( $# -eq 0)。

    #!/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 を取り、元のスクリプトを実行します。渡された引数 (フォルダー) が 1 つだけではない場合、何もしません。

:) お役に立てれば!

于 2013-06-30T21:22:29.287 に答える