سؤال

أقوم بتشغيل تطبيق، يطالب بكلمة مرور للمستخدم حول عشرات العصر :-( حاولت استخدام توقع التحايل على هذه المشكلة، وجعله يعمل في الوضع التلقائي، ولكن لا أستطيع الحصول على مشكلة عدة مرات كلمة المرور، التي ليست ثابتة تماما. في بعض الأحيان يسأل 4-5 مرات وفي وقت ما حوالي 9-10 مرات.

هل هناك حل أفضل للمشكلة مما قدمته أدناه:

spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
  " password: $"    send "$password\r"
  "^Rollout Done "
  "^Rollout Updated "
}

مع الحل المذكور أعلاه، لم أتمكن فقط من التقاط كلمة المرور مرتين ثم بدء الدخول يدويا في دخول بقية الوقت، هل هناك حلقة ممكنة بكلمة المرور؟

هل كانت مفيدة؟

المحلول

البحث عن exp_continue. أمر - يمنع الحالية [expect] أمر من العودة، لذلك يمكن أن يجد أي مطالبات كلمة مرور لاحقة.

spawn myApp [lindex $argv 0]
expect {
    -re { password: $} {
        send "$password\r"
        exp_continue
    }
    -re {^Rollout (?:Done|Updated) }
}

إذا كنت تريد أن يدخل المستخدم بكلمة المرور، بدلا من تخزينها في نص عادي في البرنامج النصي، راجع كيف يمكنني تقديم مطالبة البرنامج النصي لكلمة مرور؟

نصائح أخرى

نتوقع أن تستخدم الحلقات - إنه فقط TCL مع بعض الأوامر المضافة وأعتقد ذلك. لذلك فقط تفعل

set found 0
while {$found < 1}
{
expect {
 " password: $"    send "$password\r"
 "^Rollout Done "  set found 1
 "^Rollout Updated " set found 1
}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top