2009-12-06 5 views
11

私は、フォルダに対して実行したいautomatorスクリプトを持っています。スクリプトでフォルダ内の各ファイルを取り出し、シェルコマンドを実行するようにします。 Automatorはstdinに入力を渡すように設定されていますが、私は下のstdinを正しく使用しているとは思わないので、助けてください。リンゴのAutomatorを使ってファイル名をシェルスクリプトに渡す

for f in "[email protected]" 
do 
    java -Xmx1000m -jar /Users/myprog/myprog.jar $f 
done 

答えて

9

特殊変数[email protected]は、スクリプトに提供されるすべてのコマンドライン引数を表します。

forは、それぞれをステップスルーし、毎回jarファイルを実行します。 forのデフォルトの動作は[email protected]を使用することですので、

for f 
do 
    java -Xmx1000m -jar /Users/myprog/myprog.jar "$f" 
done 

:あなたはにスクリプトを短縮することができます。

引数にスペースがある場合は、javaコマンドの最後に$ fの前後に引用符を付ける必要があります。

2

あなたのスクリプトは標準入力を使用しているようには見えないので、私はあなたの質問を理解していません。 [email protected] special parameterはargvで引数として渡された位置パラメータに展開されます。それはあなたがこの方法シェルから直接スクリプトを呼び出した場合と同じように動作します:

$ cat >test2 
for f in $(cat) 
do 
    echo $f 
done 
$ chmod 755 test2 
$ ./test2 <<EOF 
> a b c 
> EOF 
a 
b 
c 
5
:あなたは、あなたが はこのような何かを行うことが標準入力から引数を取得したい場合は

$ cat >test 
for f in "[email protected]" 
do 
    echo $f 
done 
$ chmod 755 test 
$ ./test a b c 
a 
b 
c 

ここで見たことに基づいて、ファインダーのコンテキストメニューを使ってファイルを右クリックして変換できる便利な「サービス」を設定することができます。これを設定するには

  • Automatorを起動
  • メインメニューから "新規"
  • を選択し、 "サービス"(歯車のアイコン)
  • ドラッグを選択し、「ユーティリティを落とします - >左側のライブラリからメインの "エディタ"領域にシェルスクリプトを実行します。
  • 次のコードで既存のテキスト "猫" に置き換え:

    for f in "[email protected]"; do 
        /usr/bin/afconvert -f caff -d [email protected] -c 1 --mix "$f" 
        echo "$f converted" 
    done 
    

    注:セットアップは上記モノラルに変換され(-C 1 --mix)16ビットの@ 32000hzでの(LEI16 @ 32000 =リトルエンディアン16ビット)。ターミナルで/ usr/bin/afconvert -hを使用すると、使用可能なすべてのオプションが表示されます。エディタの上部に

  • あなたは、2回のドロップダウンを参照して、それらを次のように設定する必要があります:シェルスクリプトエディタ領域で

    Service receives selected [Files and Folders] in [Finder.app] 
    
  • を、確認してください。

    "Shell" is set to "/bin/bash" 
    

    "pass input" is set to "arguments" 
    
  • 「CAFに変換」のようなものを保存します。

  • そこにいくつかのWAVがあるフォルダに移動します。
  • WAVを右クリックすると、コンテキストメニューの下部にある「Convert to CAF」が表示されます。
7

「標準入力を正しく使用していない」と言っても間違いありません。実際、あなたが指定したスクリプトスニペットから、スクリプトはコマンドラインで引数としてファイルを取得していると仮定します...あなたはstdinをまったく使用していません!

Run Shell Scriptアクションの右下にあるXは、ドロップダウンボックスで、「入力を標準に渡す」および「入力を引数として渡す」というドロップダウンボックスです。これらのオプションは、選択したファイルがスクリプトアクションにどのように渡されるかを指示します。 「引数として」オプションを選択した場合、スクリプトは、「引数は次のように」が選択されている場合、このテンプレートは、アクション自体によって提供される以下のテンプレート

for f in "[email protected]"; do 
# so stuff here 
done 

を使用する必要があります。 #の後

while read fname; do # read each line - assumes one file name per line 
    # do clever stuff with the filename 
    echo $fname # to illustrate we'll simply copy the filename to stdout 
done 

(あなたはbashのスクリプトを知らない場合には、すべてのもの:「STDINへ」オプションが選択されている場合、そのスクリプトこのtamplateを使用する必要がある一方

、ライン上のスクリプトの動作によって提供されるテンプレートは、私の意見で非常に役立つ簡単な、単一のコマンド

cat 

されていないことをコメント)

注意です。

実際にスクリプト領域にテキストを入力するまで、 'stdin'と 'arguments'を変更すると、スクリプトボックスの内容が変更されます(これはスクリプトがどのように表示されるかのヒントになります)。何かを入力すると、スイッチングはもう起こりません。