2011-08-06 8 views
12

मैं एक शैल स्क्रिप्ट के साथ समस्याओं में भाग रहा हूं जो एप्पलस्क्रिप्ट के एक छोटे से हिस्से का उपयोग करता है। जब मैं इसे एप्पलस्क्रिप्ट संपादक के साथ संकलित करता हूं तो यह काम करता है। यह एक शेल स्क्रिप्ट के भीतर नहीं है।osascript/वाक्यविन्यास त्रुटि: लाइन के अपेक्षित अंत लेकिन कमांड नाम मिला। (-2741)

osascript -e 'tell application "System Events" -e 'activate' 

osascript -e 'tell process "Application 10.5" -e 'set frontmost to true' -e 'end tell' 

osascript -e 'delay 1' -e 'keystroke return' -e 'delay 1' -e 'keystroke return' 

end tell 

Apple स्क्रिप्ट (जो काम करता है):

tell application "System Events" 
activate 
tell process "Application 10.5" 
    set frontmost to true 
end tell 

delay 1 
keystroke return 
delay 1 
keystroke return 

end tell 

[अद्यतन]/[हल]

यह ले लिया की देखभाल

44:49: syntax error: Expected end of line but found command name. (-2741) 23:28: syntax error: Expected end of line but found “after”. (-2741)

यहाँ खोल कोड है किसी भी तरह की समस्याएं मैं काम करने के लिए सेबस्क्रिप्ट को संशोधित करने की कोशिश कर रहा था नरक स्क्रिप्ट:

## shell script code 

echo "shell script code" 
echo "shell script code" 

## applescript code 

osascript <<EOF 
tell application "Scriptable Text Editor" 
    make new window 
    activate 
    set contents of window 1 to "Hello World!" & return 
end tell 
EOF 

## resume shell script... 

यह बहुत शांत है कि आप शुद्ध applescript एक खोल स्क्रिप्ट में सीधे प्रस्तुत कर पाते हैं है। -e ध्वज का उपयोग कर के ;-)

उत्तर

1

इसके बजाय, आप बस अपने applescript कोड एक छोटे से पाठ फ़ाइल में इसके अलावा, स्टोर और

osascript /path/to/script 

कॉल कर सकते हैं तुम क्या करने के लिए एक आवेदन या प्रक्रिया बता रहे हैं, तो बस एक बात है, आप इसे इस प्रकार लिख सकते हैं:

tell process "MyProcess" to perform action. 

अब मैं इसके बारे में सोचो, -e ध्वज के साथ अलग से प्रत्येक पंक्ति चल शायद इसलिए है क्योंकि मुझे नहीं लगता कि सभी लाइनों कनेक्ट करेगा काम नहीं करेंगी कि और एक कार्यक्रम के रूप में चलाते हैं। उदाहरण के लिए, मैंने एक चर सेट करने के लिए osascript -e का उपयोग करके परीक्षण किया है। मैंने फिर परिवर्तनीय पढ़ने के लिए एक अलग osascript -e का उपयोग किया, और यह नहीं कर सका।

[*]

+1

स्पष्टीकरण के लिए धन्यवाद। मैंने वास्तव में काम करने के लिए संशोधित करने के सभी कामों के बिना बिना किसी स्क्रिप्ट स्क्रिप्ट में सेबस्क्रिप्ट को डालने का एक शानदार तरीका निकाला। (ऊपर देखो) - –

5

प्रत्येक osascript (1) आदेश, पूरी तरह से अलग प्रक्रिया है, और इसलिए एक पूरी तरह से अलग स्क्रिप्ट है तो आप उन दोनों के बीच (जैसे चर के रूप में) राज्य का उपयोग नहीं कर सकते हैं। आप osascript में एकाधिक -e विकल्पों का उपयोग करके एक बहु-पंक्ति स्क्रिप्ट बना सकते हैं - वे सभी स्क्रिप्ट बनाने के लिए उनके बीच लाइन ब्रेक के साथ मिलकर मिलते हैं। पर्याप्त रूप से लंबी लिपि के लिए, एक अलग फ़ाइल या "यहां दस्तावेज़", जैसा कि आपने अपने अंतिम समाधान में उपयोग किया था, जाने का एक अच्छा तरीका है।

इसके अलावा, अगर अपनी स्क्रिप्ट ज्यादातर (या पूरी तरह से) AppleScript है, तो आप एक "खोल" स्क्रिप्ट कि बस एक कुटिया फ़ाइल कि invokes osascript का उपयोग कर AppleScript है बना सकते हैं:

#!/usr/bin/osascript 
display dialog "hello world" 

... और फिर आवश्यकतानुसार do shell script का उपयोग करें।

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