2009-12-06 9 views
11

मेरे पास एक ऑटोमेटर स्क्रिप्ट है जिसे मैं किसी फ़ोल्डर पर चलाने के लिए चाहता हूं। मैं चाहता हूं कि स्क्रिप्ट फ़ोल्डर में प्रत्येक फाइल ले ले और उस पर मेरा खोल कमांड चलाएं। Automator stdin में इनपुट पास करने के लिए सेट है, लेकिन मुझे नहीं लगता कि मैं नीचे stdin का उपयोग कर रहा हूँ, क्या आप कृपया मदद कर सकते हैं?शैल स्क्रिप्ट पर फ़ाइल नाम पास करने के लिए सेब के ऑटोमेटर का उपयोग

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

उत्तर

9

विशेष चर [email protected] स्क्रिप्ट को प्रदान किए गए सभी कमांड लाइन तर्कों का प्रतिनिधित्व करता है।

for प्रत्येक के माध्यम से लूप चरण और प्रत्येक बार जार फ़ाइल निष्पादित करता है। आप करने के लिए स्क्रिप्ट को छोटा कर सकते हैं:

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

के बाद से for के डिफ़ॉल्ट व्यवहार को [email protected] उपयोग करने के लिए है।

तर्कों में रिक्त स्थान होने पर आपको जावा कमांड के अंत में $ f के आसपास उद्धरण देना चाहिए।

2

मुझे यकीन नहीं है कि मैं आपका प्रश्न समझता हूं क्योंकि आपकी स्क्रिप्ट stdin का उपयोग नहीं कर रही है। [email protected] special parameter argv में तर्क के रूप में पारित स्थितित्मक पैरामीटर तक फैलता है। यदि आप खोल से स्क्रिप्ट सीधे इस तरह से कहा जाता है के रूप में एक ही तरह से काम करता है:

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

यदि आप, आप कुछ इस तरह कर सकता है stdin से तर्क प्राप्त करना चाहता था:

$ cat >test2 
for f in $(cat) 
do 
    echo $f 
done 
$ chmod 755 test2 
$ ./test2 <<EOF 
> a b c 
> EOF 
a 
b 
c 
5

मैंने जो देखा है उसके आधार पर, आप एक आसान "सेवा" स्थापित कर सकते हैं जो आपको खोजकर्ता में प्रासंगिक मेनू का उपयोग करके फ़ाइलों को राइट-क्लिक और कन्वर्ट करने की अनुमति देता है। मुख्य मेनू से

  • लॉन्च स्वचालक
  • चुनें "नया"
  • चुनें "सेवा" (गियर आइकन)
  • खींचें और "उपयोगिता ->:

    इसे सेट करने के बाएं हाथ की लाइब्रेरी से मुख्य "संपादक" क्षेत्र में "शैल स्क्रिप्ट" चलाएं।

  • निम्न कोड के साथ मौजूदा पाठ "बिल्ली" बदलें:

    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 का उपयोग करें।

  • संपादक तो आप दो बूंद-चढ़ाव देखना चाहिए के शीर्ष पर, उन्हें सेट इस प्रकार है:

    Service receives selected [Files and Folders] in [Finder.app] 
    
  • शैल स्क्रिप्ट संपादक क्षेत्र में, यह सुनिश्चित:

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

    और

    "pass input" is set to "arguments" 
    
  • चीज़ को "सीएएफ में कनवर्ट करें" जैसे कुछ सहेजें

  • वहां कुछ डब्ल्यूएवी वाले फ़ोल्डर में नेविगेट करें।
  • डब्ल्यूएवी पर राइट क्लिक करें और आपको प्रासंगिक मेनू के नीचे "सीएएफ में कनवर्ट करें" देखना चाहिए।
7

जब आप कहते हैं कि आप "सही ढंग से stdin का उपयोग नहीं कर रहे हैं" तो आप सही हैं। वास्तव में, आपके द्वारा प्रदान की गई स्क्रिप्ट स्निपेट से, आपकी स्क्रिप्ट मानती है कि आप फ़ाइलों को कमांड लाइन पर तर्क के रूप में प्राप्त कर रहे हैं ... आप stdin का उपयोग नहीं कर रहे हैं!

रन शेल स्क्रिप्ट एक्शन के ऊपरी दाएं कोने में, एक्स के नीचे 2 विकल्प के साथ एक ड्रॉप डाउन बॉक्स है: 'पास इनपुट: stdin' और 'पास intput: तर्क के रूप में'। ये विकल्प निर्धारित करते हैं कि चुनी गई फाइलें आपकी स्क्रिप्ट क्रिया में कैसे पारित की जाती हैं। 'तर्क' के रूप में विकल्प चुना जाता है, तो अपनी स्क्रिप्ट निम्न टेम्पलेट

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

जब 'तर्क' के रूप में चयन किया गया है इस टेम्पलेट कार्रवाई से ही प्रदान की जाती है का उपयोग करना चाहिए।

दूसरी ओर, यदि 'stdin के लिए' विकल्प चुना जाता है, तो आप स्क्रिप्ट इस tamplate उपयोग करना चाहिए:

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 

(घटना आप बैश पटकथा पता नहीं है में, सब कुछ # के बाद एक लाइन पर है कि स्क्रिप्ट कार्रवाई द्वारा प्रदान की टेम्पलेट सरल, एकल आदेश

cat 

नहीं मेरी राय में बहुत उपयोगी है एक टिप्पणी)

नोट है।

ध्यान दें कि जब तक आप वास्तव में स्क्रिप्ट क्षेत्र में टेक्स्ट दर्ज नहीं करते हैं, तब तक 'to stdin' और 'तर्क के रूप में' के बीच बदलना स्क्रिप्ट बॉक्स की सामग्री को बदल देगा (मुझे लगता है कि यह आपकी स्क्रिप्ट की तरह दिखने का संकेत है) लेकिन एक बार जब आप कुछ दर्ज करते हैं, तो स्विचिंग अब नहीं होती है।

संबंधित मुद्दे