문제

이것은 작동합니다 (예 : "3 인수") :

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

이것은 ( "인수 3 : 3"만 인쇄하지 않으며, 이전의 두 인수는 아닙니다) :

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

두 경우 모두 사용하여 스크립트를 실행하고 있습니다 osascript Mac OS X 10.5.5에서. 예제 호출 :

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

출력을 리디렉션하지 않으므로 스크립트에 오류가 발생하지 않는다는 것을 알고 있습니다.

내가 추가하면 display dialog 위의 진술 do shell script,“사용자 상호 작용 허용 없음”오류를 던지므로 루프 본체를 실행하고 있음을 알고 있습니다.

내가 뭘 잘못하고 있죠? osaScript가 아무것도 인쇄하지 않도록하는이 루프는 무엇입니까?

도움이 되었습니까?

해결책

임시 파일을 사용하지 않도록이를 시도하십시오.

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

다른 팁

귀하의 문제는 그 문제에 대해 루프 또는 ArgV의 사용과 관련이없는 것으로 보입니다. 마지막으로 만 더 간단한 테스트 케이스가 있습니다. do shell script 실제로 결과를 반환합니다.

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

또한 다음과 같은 약간의 변화는 예상 결과를 얻을 것입니다.

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 다음과 같은 4 개의 줄이 포함됩니다.

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

이 해결 방법이 실패합니다.

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

지금도 마지막 줄만 반환됩니다. 이것은 다음 질문과 관련이있을 수 있습니다 TN2065:

Q : 내 스크립트는 오랫동안 출력을 생성합니다. 결과가 들어올 때 어떻게 읽습니까?

A : 다시 말하지만, 짧은 대답은 당신이하지 않는다는 것입니다. UNIX 용어로는 파이프를 만드는 데 사용할 수 없습니다. 그러나 할 수있는 일은 명령을 배경에 넣고 (다음 질문 참조) 출력을 파일로 보내고 파일이 채워질 때 파일을 읽는 것입니다.

아아, 나는 사과 스크립트 자체가 여러 줄을 읽는 방법을 알기에 충분한 사과 스크립트 -fu가 없다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top