Ich habe ein Shell-Skript, das ich osascript
verwendet, und dass osascript
ruft ein Shell-Skript und übergibt in einer Variablen, die ich im ursprünglichen Shell-Skript festgelegt haben. Ich weiß nicht, wie ich diese Variable vom AppleScript zum Shell-Skript weiterleiten kann.Übergeben Variable von Shell-Skript zu AppleScript
Wie kann ich eine Variable von Shell-Skript zu AppleScript zu Shell-Skript übergeben ...?
Lassen Sie mich wissen, wenn ich keinen Sinn mache.
i=0
for line in $(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'); do
UDID=${line}
echo $UDID
#i=$(($i+1))
sleep 1
osascript -e 'tell application "Terminal" to activate' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e 'tell application "Terminal" to do script "cd '$current_dir'" in selected tab of the front window' \
-e 'tell application "Terminal" to do script "./script.sh ip_address '${#UDID}' &" in selected tab of the front window'
done
Das ist ein schlechter Ratschlag. Abgesehen davon, dass es unnötig schwerfällig ist, reinigt es den eingefügten Text nicht, so dass es weder robust noch sicher ist, z. 'text = 'Bob sagt" hallo "'' wird dazu führen, dass AS einen Syntaxfehler aufgrund von nicht verzahnten Anführungszeichen erzeugt. Benutze niemals Code Munging, wenn eine bessere Lösung existiert, was es tut: wie Lauri Ranta sagte, definiere einen expliziten 'run' Handler und gib deine Strings über ARGV weiter. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/16966117/bash-combining-variables-to-form-a-command-sent-to-applescript-using-the-osascr/16977401#16977401. – foo
@foo Du hast recht, mit 'on run argv' ist" more "korrekt. Meine ist keine _perfect_ Lösung, aber ich benutze es selbst viele Male ohne Probleme, es ist einfach und für viele Skripte verwendbar ... – jm666
Ihre ist eine _buggy_ Lösung. Wenn $ text doppelte Anführungszeichen oder Backslash-Zeichen enthält, wird der AS-Code entweder zu einem Fehler oder - schlimmer - zu einem unbeabsichtigten Verhalten führen. Wenn Sie Code Munging verwenden müssen, müssen Sie Ihre Eingaben bereinigen. z.B. Google "SQL Injection Attack" zu verstehen, warum "es für mich funktioniert" ist _nicht_ eine angemessene Antwort, wenn jemand auf diesen Fehler hinweist. – foo