سؤال

وهذا يعمل (طباعة، على سبيل المثال، "3 الحجج"):

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

وهذا لا (يطبع فقط "وسيطة 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 سوف يحتوي على أربعة خطوط، كما يلي:

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 :

<اقتباس فقرة>   

س: بلادي النصي تنتج الانتاج على مدى فترة زمنية طويلة. كيف يمكنني قراءة النتائج لأنها تأتي في؟

     

وA: مرة أخرى، والجواب القصير هو أنك لا - هل سوف شيل لن يعود حتى يتم الأمر. من حيث يونكس، فإنه لا يمكن أن تستخدم لإنشاء أنبوب. ما يمكنك القيام به، ومع ذلك، هو وضع الأمر في الخلفية (راجع السؤال التالي)، وإرسال انتاجها إلى ملف، ومن ثم قراءة الملف كما تمتلئ.

للأسف، وأنا لم يكن لديك ما يكفي من ابليسكريبت فو لمعرفة كيفية الحصول على ابليسكريبت نفسه قراءة خطوط متعددة، والتي أظن أن العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top