Frage

Das funktioniert (Druck, zum Beispiel „3 Argumente“):

to run argv
    do shell script "echo " & (count argv) & " arguments"
end run

Dies gilt nicht (druckt nur „Argument 3: drei“, und nicht die vorherigen zwei Argumente):

to run argv
    do shell script "echo " & (count argv) & " arguments"

    repeat with i from 1 to (count argv)
        do shell script "echo 'Argument " & i & ": " & (item i of argv) & "'"
    end repeat
end run

In beiden Fällen Ich bin mit dem Skript osascript auf Mac OS X 10.5.5. Beispiel Aufruf:

osascript 'Script that takes arguments.applescript' Test argument three

Ich bin Umleitung nicht den Ausgang, so dass ich weiß, dass das Skript nicht einen Fehler zu werfen.

Wenn ich eine display dialog Aussage über den do shell script hinzufügen, es wirft eine „keine Interaktion mit dem Benutzer erlaubt“ Fehler, damit ich weiß, dass es den Schleifenkörper ausgeführt wird.

Was mache ich falsch? Was es zu dieser Schleife ist, die osascript bewirkt nichts drucken?

War es hilfreich?

Lösung

Versuchen Sie, dies zu vermeiden, die temporäre Datei zu verwenden.

to run argv
        set accumulator to do shell script "echo " & (count argv) & " arguments" altering line endings false
        repeat with i from 1 to (count argv)
                set ln to do shell script "echo 'Argument " & i & ": " & (item i of argv) & "'" altering line endings false
                set accumulator to accumulator & ln
        end repeat
        return accumulator
end run

Andere Tipps

Ihr Problem scheint mit der Schleife oder der Verwendung von argv nicht verwandt zu sein, was das betrifft. Hier ist ein viel einfacherer Test Fall, in dem nur der letzten do shell script tatsächlich ein Ergebnis zurückzugibt:

do shell script "echo foo"
delay 2
do shell script "echo bar"

Darüber hinaus wird die folgende geringfügige Änderung Ergebnisse zu erwarten:

to run argv
    do shell script "echo " & (count argv) & " arguments > /test.txt"

    repeat with i from 1 to (count argv)
        do shell script "echo 'Argument " & i & ": " & (item i of argv) & "' >> /test.txt"
    end repeat
end run

test.txt werden vier Zeilen enthalten, etwa so:

3 arguments
Argument 1: foo
Argument 2: bar
Argument 3: baz

Diese Problemumgehung fehlschlägt:

to run argv
    do shell script "echo " & (count argv) & " arguments > /tmp/foo.txt"

    repeat with i from 1 to (count argv)
        do shell script "echo 'Argument " & i & ": " & (item i of argv) & "' >> /tmp/foo.txt"
    end repeat

    do shell script "cat /tmp/foo.txt"
    do shell script "rm /tmp/foo.txt"
end run

Auch jetzt, nur die letzte Zeile zurückgegeben. Dies kann auf die folgende Frage von TN2065 :

  

F: Mein Skript-Ausgabe über eine lange Zeit produzieren. Wie lese ich die Ergebnisse, wie sie kommen in?

     

A: Auch hier ist die kurze Antwort ist, dass Sie dies nicht tun - tun Shell-Skript wird bestätigt, bis der Befehl ausgeführt wird. In Unix-Bedingungen, es kann nicht verwendet werden, um ein Rohr zu schaffen. Was Sie tun können, ist jedoch den Befehl in den Hintergrund zu stellen (siehe nächste Frage), seine Ausgabe in eine Datei senden, und dann die Datei lesen, da es füllt.

Ach, ich habe nicht genug Apple-fu zu wissen, wie haben Applescript selbst mehrere Zeilen lesen, die ich arbeiten würde vermuten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top