প্রত্যাশা একটি প্রোগ্রাম যা একটি স্ক্রিপ্ট অনুযায়ী অন্যান্য ইন্টারেক্টিভ প্রোগ্রামের সাথে কথা বলে। স্ক্রিপ্ট অনুসরণ করে, আশা করি কোন প্রোগ্রাম থেকে কী প্রত্যাশা করা যেতে পারে এবং সঠিক প্রতিক্রিয়া কী হওয়া উচিত। একটি ব্যাখ্যাকৃত ভাষা ডায়ালগটি নির্দেশ করার জন্য শাখা এবং উচ্চ স্তরের নিয়ন্ত্রণ কাঠামো সরবরাহ করে। উপরন্তু, ব্যবহারকারী নিয়ন্ত্রণ নিতে এবং সরাসরি যখন স্ক্রিপ্ট ফিরে নিয়ন্ত্রণ, যখন সরাসরি ইন্টারঅ্যাক্ট করতে পারেন।
Expectk প্রত্যাশা এবং টাকা একটি মিশ্রণ। এটা প্রত্যাশা এবং টাকা এর ইচ্ছা মত আচরণ করে। প্রত্যাশা সরাসরি সি বা সি ++ ছাড়া সরাসরি ব্যবহার করা যেতে পারে।
"এক্সপেক্ট" নামটি ইউকপ, কিমিট এবং অন্যান্য মডেম নিয়ন্ত্রণ প্রোগ্রামগুলি দ্বারা জনপ্রিয় ক্রম প্রেরণ / প্রত্যাশা ধারণা থেকে আসে। তবে ইউকপের বিপরীতে, প্রত্যাশাটি সাধারণকরণ করা হয়েছে যাতে এটি ব্যবহারকারী-স্তরের কমান্ডের মতো কোনও প্রোগ্রাম এবং টাস্কের সাথে মেনে চলতে পারে। প্রত্যাশা একই সময়ে বিভিন্ন প্রোগ্রামের সাথে কথা বলতে পারেন।
কি আশা করতে পারেন
উদাহরণস্বরূপ, এখানে কিছু জিনিস আশা করা যায় যা কমান্ডটি করতে পারে:
- আপনার কম্পিউটারকে আপনাকে ডায়াল করতে কারণ করুন, যাতে আপনি কলটির জন্য অর্থ প্রদান না করে লগ ইন করতে পারেন।
- একটি গেম শুরু করুন এবং যদি সর্বোত্তম কনফিগারেশন উপস্থিত না হয় তবে তা আবার এবং আবার চালু করুন) এটি না হওয়া পর্যন্ত, এবং তারপরে আপনার কাছে নিয়ন্ত্রণ পরিচালনা করে।
- Fsck চালান, এবং তার প্রশ্নের প্রতিক্রিয়া হিসাবে, পূর্ব নির্ধারিত মানদণ্ডের উপর ভিত্তি করে "হ্যাঁ" বা "না" উত্তর দিন অথবা আপনার কাছে নিয়ন্ত্রণ প্রদান করুন।
- অন্য নেটওয়ার্কে সংযোগ করুন এবং স্বয়ংক্রিয়ভাবে আপনার মেইল পুনরুদ্ধার করুন যাতে মনে হয় এটি মূলত আপনার স্থানীয় সিস্টেমে পাঠানো হয়েছে।
- পরিবেশ ভেরিয়েবলগুলি, বর্তমান ডিরেক্টরি, অথবা রিলগিন, টেলনেট, টিপ, su, বা chgrp জুড়ে কোনো ধরনের তথ্য বহন করুন
শেল এই কর্ম সঞ্চালন করতে পারে না কেন বিভিন্ন কারণ আছে। প্রত্যাশা সঙ্গে সব সম্ভব।
সাধারণত, প্রত্যাশা প্রোগ্রাম এবং ব্যবহারকারীর মধ্যে মিথস্ক্রিয়া প্রয়োজন যে কোনো প্রোগ্রাম চলমান জন্য দরকারী। প্রয়োজনীয় যে সব ইন্টারঅ্যাকশন প্রোগ্রামগতভাবে চিহ্নিত করা যেতে পারে। প্রত্যাশিত প্রোগ্রামটি নিয়ন্ত্রণ না করেই ব্যবহারকারীকে ফিরে নিয়ন্ত্রণ দিতে পারে। একইভাবে, ব্যবহারকারী যে কোনো সময় স্ক্রিপ্ট নিয়ন্ত্রণ করতে পারেন।
ব্যবহার
এক্সিকিউট করার জন্য কমান্ডের একটি তালিকা জন্য cmdfile অনুমান করে। আশা # সিস্টেমে সমর্থিত সিস্টেমে প্রত্যাশিতভাবে প্রত্যাশিত হতে পারে! স্ক্রিপ্টটি এক্সিকিউটেবল হিসাবে চিহ্নিত করে এবং স্ক্রিপ্টে প্রথম লাইন তৈরি করে উল্লেখ করে:
#! / usr / স্থানীয় / bin / expect -f
অবশ্যই, পথ সঠিকভাবে বর্ণনা করা উচিত যেখানে জীবন আশা। / usr / স্থানীয় / বিন শুধু একটি উদাহরণ।
-C flag স্ক্রিপ্টে যে কোনও আগে নির্বাহ করা একটি কমান্ড prefaces। শেল দ্বারা ভাঙা প্রতিরোধ করার জন্য কমান্ড উদ্ধৃত করা উচিত। এই বিকল্প একাধিক বার ব্যবহার করা যেতে পারে। একাধিক কমান্ডগুলি সেমিকোলনগুলির সাথে আলাদা করে একক-সি দিয়ে কার্যকর করা যেতে পারে। কমান্ড তারা প্রদর্শিত যাতে মৃত্যুদন্ড কার্যকর করা হয়। Expectk ব্যবহার করার সময়, এই বিকল্প হিসাবে-কমান্ড উল্লেখ করা হয়।
-ড ফ্ল্যাগ কিছু ডায়াগনস্টিক আউটপুট সক্ষম করে, যা প্রাথমিকভাবে কমান্ডের অভ্যন্তরীণ ক্রিয়াকলাপ যেমন প্রত্যাশা এবং ইন্টারঅ্যাক্ট করে। এই পতাকাটি একটি এক্সপেক্ট স্ক্রিপ্টের শুরুতে "exp_internal 1" হিসাবে একই প্রভাব রয়েছে, প্লাসটির প্রত্যাশা সংস্করণ মুদ্রিত হয়।
ডি-ডি পতাকা একটি মিথস্ক্রিয় ডিবাগার সক্ষম করে। একটি পূর্ণসংখ্যা মান অনুসরণ করা উচিত। মূল্যটি যদি অ-শূন্য হয় বা কোন ^ C চাপলে বা ব্রেকপয়েন্ট আঘাত হয়, বা স্ক্রিপ্টে অন্য উপযুক্ত ডিবাগার কমান্ড প্রদর্শিত হয় তবে পরবর্তী Tcl পদ্ধতির আগে ডিবাগারটি নিয়ন্ত্রণ করবে। Expectk ব্যবহার করার সময়, এই বিকল্প হিসাবে উল্লেখ করা হয় -ডিবাগ।
-F পতাকা একটি ফাইল যা কমান্ড পড়তে prefaces। পতাকাটি নিজেই ঐচ্ছিক হিসাবে এটি # ব্যবহার করার সময় শুধুমাত্র দরকারী! নোটেশন, যাতে অন্যান্য আর্গুমেন্ট কমান্ড লাইন সরবরাহ করা যেতে পারে। Expectk ব্যবহার করার সময়, এই বিকল্পটি -ফাইল হিসাবে উল্লেখ করা হয়।
ডিফল্টরূপে, কমান্ড ফাইলটি মেমরিতে পড়ানো হয় এবং এটি সম্পূর্ণভাবে কার্যকর হয়। এটি মাঝে মাঝে একটি লাইনে ফাইল পড়ার জন্য পছন্দসই। ইচ্ছাকৃত ফাইলগুলি এইভাবে পরিচালনা করার জন্য, -b ফ্ল্যাগটি ব্যবহার করুন। Expectk ব্যবহার করার সময়, এই অপশনটি -buffer হিসাবে উল্লেখ করা হয়।
যদি স্ট্রিং একটি ফাইলের নাম হিসাবে সরবরাহ করা হয় তবে পরিবর্তে স্ট্যান্ডার্ড ইনপুট পড়তে হয়। প্রকৃতপক্ষে "-" নামের একটি ফাইল থেকে পড়তে "./-" ব্যবহার করুন।
-আই পতাকা কারণগুলি একটি ফাইল থেকে তাদের পড়ার পরিবর্তে ক্রিয়াগুলির জন্য ইন্টারঅ্যাক্টিভ প্রম্পট করার প্রত্যাশা করে। প্রম্পটিং প্রস্থান কমান্ড বা EOF এর মাধ্যমে বাতিল করা হয়। -আই পতাকাটি ধরা হয় যদি কোন কমান্ড ফাইল না -c ব্যবহৃত হয়। এক্সপেক্ট ব্যবহার করার সময়, এই বিকল্পটির নাম-ইন্টারেক্টিভ হিসাবে উল্লেখ করা হয়।
- অপশন শেষে delimit ব্যবহার করা যেতে পারে। এটি যদি আপনি আপনার স্ক্রিপ্টে কোনও বিকল্পের মত যুক্তি ছাড়াই পাস করতে চান তাহলে এটি কার্যকর। এই দরকারীভাবে # মধ্যে স্থাপন করা যাবে! প্রত্যাশা দ্বারা কোনো flaglike ব্যাখ্যা প্রতিরোধ লাইন। উদাহরণস্বরূপ, নিম্নোক্ত আর্গুমেন্টগুলি ভেরিয়েবলের স্ক্রিপ্ট নাম সহ চলে যাবে argv হয় .
#! / usr / স্থানীয় / bin / প্রত্যাশা -
মনে রাখবেন যে স্বাভাবিক getopt (3) এবং execve (2) সম্মেলন অবশ্যই যখন # arguments যোগ করা আবশ্যক! লাইন।
ফাইলটি $ exp_library / expect.rc উপস্থিত থাকলে স্বয়ংক্রিয়ভাবে সোর্স করা হয়, যতক্ষণ না -N পতাকা ব্যবহার করা হয়। (এক্সপেক্ট ব্যবহার করার সময়, এই বিকল্পটি -NORC হিসাবে উল্লেখ করা হয়।) এর পরেই, ফাইলটিকে / / .expect.rc স্বয়ংক্রিয়ভাবে সোর্স করা হয়, যতক্ষণ না- একটি পতাকা ব্যবহার করা হয়। পরিবেশ পরিবর্তনশীল DOTDIR সংজ্ঞায়িত করা হয়, এটি একটি ডিরেক্টরি হিসাবে গণ্য করা হয় এবং .expect.rc সেখানে থেকে পড়তে হয়। Expectk ব্যবহার করার সময়, এই বিকল্পটি -norc হিসাবে উল্লেখ করা হয়।এই sourcing শুধুমাত্র কোনো-সি ফ্ল্যাগ নির্বাহের পরে ঘটে।
-v কারণ তার সংস্করণ নম্বর প্রিন্ট এবং প্রস্থান আশা। এক্সপেক্টের অনুরূপ পতাকা, যা দীর্ঘ পতাকা নাম ব্যবহার করে, -বৃত্ত।
ঐচ্ছিক args একটি তালিকা মধ্যে নির্মিত এবং পরিবর্তনশীল নামে argv এবং সংরক্ষিত হয়। argc এর argv দৈর্ঘ্য শুরু হয়।
কোন স্ক্রিপ্ট ব্যবহৃত হয় না Argv0 স্ক্রিপ্ট বা বাইনারি নাম হতে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত স্ক্রিপ্টের নাম এবং প্রথম তিনটি আর্গুমেন্ট মুদ্রণ করে:
send_user "$ argv0 lrange $ argv 0 2 n"
কমান্ড
প্রত্যাশা টুল টুল ভাষা ব্যবহার করে। Tcl নিয়ন্ত্রণ নিয়ন্ত্রণ প্রবাহ (যদি, জন্য, বিরতি), অভিব্যক্তি মূল্যায়ন এবং recursionand পদ্ধতি সংজ্ঞা হিসাবে অনেক অন্যান্য বৈশিষ্ট্য উপলব্ধ করা হয়। এখানে ব্যবহৃত কমান্ড কিন্তু সংজ্ঞায়িত না করা (সেট, যদি, exec) Tcl কমান্ড। প্রত্যাশা অতিরিক্ত কমান্ড সমর্থন করে। অন্যথায় নির্দিষ্ট না করা হলে, কমান্ড খালি স্ট্রিং ফিরে।
কমান্ডগুলি বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয় যাতে তারা দ্রুত অবস্থিত হতে পারে। যাইহোক, নতুন ব্যবহারকারীদের স্পন, প্রেরণ, প্রত্যাশা এবং ইন্টারঅ্যাক্টের বিবরণটি পড়ার মাধ্যমে শুরু করা সহজ হতে পারে।
বন্ধ -স্ল্যাভ -অক্সেক 0 | 1 -i spawn_id
বর্তমান প্রক্রিয়া সংযোগ বন্ধ করে। সর্বাধিক ইন্টারেক্টিভ প্রোগ্রাম তাদের স্টেডিন এবং প্রস্থান উপর EOF সনাক্ত করবে; এইভাবে ঘনিষ্ঠ সাধারণত প্রক্রিয়া পাশাপাশি যথেষ্ট suffices। -আই ফ্ল্যাগ নামের spawn_id এর সাথে বন্ধ করার প্রক্রিয়াটি ঘোষণা করে।
উভয় প্রত্যাশা এবং ইন্টারঅ্যাক্ট সনাক্ত করবে যখন বর্তমান প্রক্রিয়াটি প্রস্থান করে এবং নিখুঁতভাবে বন্ধ করে দেয় তবে যদি আপনি প্রক্রিয়াটিকে হত্যা করেন তবে "exec exec $ pid" বলুন, আপনাকে স্পষ্টভাবে বন্ধ করতে হবে.
-অনেক্সেক পতাকা নির্ধারণ করে যে স্পন আইডিটি কোনও নতুন উদ্ভূত প্রসেসগুলিতে বন্ধ থাকে বা প্রক্রিয়াটি যদি ওভারলেড হয়। একটি spawn আইডি খোলা ছেড়ে, মান 0 ব্যবহার করুন। একটি অ-শূন্য পূর্ণসংখ্যা মান spawn কোনো নতুন প্রসেসে বন্ধ করে দেয়।
স্লেভ পতাকা spawn আইডি সঙ্গে যুক্ত স্লেভ বন্ধ করে। যখন সংযোগটি বন্ধ থাকে, তখনও দাসটি স্বয়ংক্রিয়ভাবে বন্ধ থাকে তবে এটি এখনও খোলা থাকে।
সংযোগটি নিখুঁতভাবে বা স্পষ্টভাবে বন্ধ কিনা তা কোন ব্যাপার না, আপনি সংশ্লিষ্ট কার্নেল প্রক্রিয়া স্লটটি সাফ করার জন্য অপেক্ষা করুন। বন্ধ কমান্ডটি অপেক্ষা করবে না কারণ কোনও গ্যারান্টি নেই যে একটি প্রক্রিয়া সংযোগ বন্ধ করার ফলে এটি প্রস্থান হতে পারে।
ডিবাগ -now 0 | 1
আপনি একটি বিবৃতি মাধ্যমে পদক্ষেপ এবং ব্রেকপয়েন্ট সেট করার অনুমতি দেয় একটি Tcl ডিবাগার নিয়ন্ত্রণ করে।
কোন আর্গুমেন্ট ছাড়াই, ডিবাগারটি চলমান না থাকলে 1 টি ফেরত দেওয়া হয়, অন্যথায় 0 টি ফেরত পাঠানো হয়।
একটি 1 যুক্তি দিয়ে, ডিবাগার শুরু হয়। একটি 0 যুক্তি সঙ্গে, ডিবাগার বন্ধ করা হয়। যদি এখন 1 নং পতাকাটি এখন-ফ্ল পতাকা দ্বারা প্রবাহিত হয়, তবে ডিবাগার অবিলম্বে শুরু হয়। অন্যথায়, পরবর্তী Tcl বিবৃতি দিয়ে ডিবাগার শুরু হয়।
ডিবাগ কমান্ড কোন ফাঁদ পরিবর্তন করে না। -D পতাকা দিয়ে আশা শুরু করার জন্য এটি তুলনা করুন।
সংযোগ সংযোগটি টার্মিনাল থেকে ফর্কযুক্ত প্রক্রিয়াটি সংযোগ বিচ্ছিন্ন করে। এটা ব্যাকগ্রাউন্ড চলমান চলতে থাকে। প্রক্রিয়া তার নিজস্ব প্রক্রিয়া গ্রুপ দেওয়া হয়। স্ট্যান্ডার্ড I / O / dev / null তে পুনঃনির্দেশিত হয়।
পটভূমিতে স্ক্রিপ্টটি চালানো চালিয়ে যাওয়ার জন্য নিচের অংশটি সংযোগ বিচ্ছিন্ন করে।
যদি {{fork! = 0} সংযোগ বিচ্ছিন্ন করুন। । ।
নিচের স্ক্রিপ্টটি একটি পাসওয়ার্ড পড়ে এবং তারপর প্রতি ঘন্টায় একটি প্রোগ্রাম চালায় যা প্রতিটি সময় এটি চালানোর সময় একটি পাসওয়ার্ড দাবি করে। স্ক্রিপ্টটি পাসওয়ার্ড সরবরাহ করে যাতে আপনাকে কেবল একবার এটি টাইপ করতে হয়।
send_user "password? " expect_user -re "(। *) n" for {} 1 {} {if {fork! = 0} {ঘুম 3600; চলুন} সংযোগ বিচ্ছিন্ন করুন priv_prog প্রত্যাশা পাসওয়ার্ড: "$ expect_out পাঠান" 1, স্ট্রিং) r "। । । প্রস্থান}
শেল অ্যাসিঙ্ক্রোনাস প্রসেস বৈশিষ্ট্য (&) এর মাধ্যমে সংযোগ বিচ্ছিন্ন করার একটি সুবিধা হল প্রত্যাশাটি সংযোগ বিচ্ছিন্ন হওয়ার পূর্বে টার্মিনাল পরামিতিগুলি সংরক্ষণ করতে পারে এবং তারপরে সেগুলিকে নতুন ptys এ প্রয়োগ করতে পারে। এবং, প্রত্যাশার সাথে টার্মিনালের পরামিতিগুলি পড়ার সুযোগ নেই কারণ টার্মিনালটি ইতিমধ্যে প্রত্যাশার সময় সংযোগ বিচ্ছিন্ন হয়ে গেছে।
প্রস্থান -পোস্ট অবস্থা
প্রস্থান করার প্রত্যাশা বা অন্যথায় তাই করতে প্রস্তুত।
দ্য -onexit পতাকা পরবর্তী প্রস্থান একটি প্রস্থান হ্যান্ডলার হিসাবে ব্যবহার করা হবে। একটি যুক্তি ছাড়া, বর্তমান প্রস্থান হ্যান্ডলার ফিরে আসে।
দ্য -বাইরে যাবার রাস্তা নেই পতাকা কারণ আশা করা প্রস্থান করার জন্য প্রস্তুত কিন্তু আসলে অপারেটিং সিস্টেমের নিয়ন্ত্রণ ফিরে ফিরে ছোট থামাতে। ব্যবহারকারী সংজ্ঞায়িত প্রস্থান হ্যান্ডলার পাশাপাশি Expect এর নিজস্ব অভ্যন্তরীণ হ্যান্ডলার চালানো হয়। কোন প্রত্যাশা কমান্ড নির্বাহ করা উচিত আশা করি। আপনি যদি অন্যান্য Tcl এক্সটেনশানগুলির সাথে প্রত্যাশা চালাচ্ছেন তবে এটি কার্যকর। বর্তমান ইন্টারপ্রেটার (এবং অর্থ পরিবেশে যদি প্রধান উইন্ডো থাকে) তাই অন্য Tcl এক্সটেনশানগুলি পরিষ্কার করতে পারে। যদি প্রত্যাশা হয় প্রস্থান আবার বলা হয় (তবে এটি ঘটতে পারে), হ্যান্ডলারগুলি পুনর্নবীকরণ করা হয় না।
প্রস্থান করার পরে, spawned প্রসেসের সব সংযোগ বন্ধ করা হয়। বন্ধ প্রম্পট প্রসেস দ্বারা একটি EOF হিসাবে সনাক্ত করা হবে। প্রস্থান স্বাভাবিক _ exit (2) পদ্ধতি কি অতিক্রম অন্য কোন কর্ম নেয়। সুতরাং, উদ্ভূত প্রসেস যা EOF পরীক্ষা করে নাও চলতে পারে। (বিভিন্ন শর্ত নির্ধারণ করার জন্য গুরুত্বপূর্ণ, উদাহরণস্বরূপ, কোন উদ্দীপিত প্রক্রিয়াটি প্রেরণ করা হবে, তবে এটি সিস্টেম-নির্ভরশীল, সাধারণত প্রস্থান (3) এর অধীনে ডকুমেন্ট করা হয়।) চালানো প্রক্রিয়াগুলি যা চলতে থাকবে তা উত্তরাধিকার দ্বারা উত্তরাধিকারী হবে।
অবস্থা (অথবা 0 নির্দিষ্ট না হলে) প্রস্থান অবস্থা হিসাবে ফেরত দেওয়া হয় আশা করা . প্রস্থান স্ক্রিপ্ট শেষে পৌঁছানো হয় নিখুঁতভাবে মৃত্যুদন্ড কার্যকর করা হয়।
exp_continue -continue_timer
আদেশ exp_continue অনুমতি আশা করা এটি স্বাভাবিকভাবেই ফিরে আসার পরিবর্তে নির্বাহ চালিয়ে চলতে থাকবে। গতানুগতিক exp_continue সময়সীমার টাইমার রিসেট। দ্য -continue_timer পতাকা পুনঃসূচনা থেকে টাইমার বাধা দেয়। (দেখুন আশা করা আরও তথ্যের জন্য.)
exp_internal -এফ ফাইল মান
ডায়াগনস্টিক তথ্য অভ্যন্তরীণ পাঠাতে আরও কমান্ড কারণ আশা করা যদি stderr যাও মান অ শূন্য। এই আউটপুট নিষ্ক্রিয় করা হয় মান 0। ডায়গনিস্টিক তথ্য প্রতিটি চরিত্র প্রাপ্ত, এবং নিদর্শন বিরুদ্ধে বর্তমান আউটপুট মেলে তৈরি প্রতিটি প্রচেষ্টা রয়েছে।
যদি ঐচ্ছিক ফাইল সরবরাহ করা হয়, সমস্ত স্বাভাবিক এবং ডিবাগিং আউটপুট যে ফাইলে লেখা হয় (নির্বিশেষে মান মান )। কোন পূর্ববর্তী ডায়গনিস্টিক আউটপুট ফাইল বন্ধ করা হয়।
দ্য -info পতাকাটি সম্প্রতি প্রদত্ত সাম্প্রতিক নন-তথ্য আর্গুমেন্টগুলির বিবরণ প্রদানের জন্য exp_internalকে কারণ করে।
exp_open args -i spawn_id
মূল স্পন আইডি অনুসারে একটি Tcl ফাইল আইডেন্টিফায়ার প্রদান করে। ফাইল আইডেন্টিফায়ারটি তখন এটি ব্যবহার করা যেতে পারে যেমন এটি Tcl এর দ্বারা খোলা হয় খোলা কমান্ড। (স্পন আইডি আর ব্যবহার করা উচিত নয় অপেক্ষা করুন মৃত্যুদন্ড কার্যকর করা উচিত নয়।
দ্য -খোলা রাখো পতাকা আশা কমান্ডের মাধ্যমে অ্যাক্সেস জন্য খোলা spawn আইডি পাতা। একজন অপেক্ষা করুন spawn আইডি মৃত্যুদন্ড কার্যকর করা আবশ্যক।
exp_pid -i spawn_id
বর্তমানে উদ্ভূত প্রক্রিয়া অনুরূপ প্রক্রিয়া আইডি প্রদান করে। যদি -i পতাকা ব্যবহার করা হয়, পিড ফিরে দেওয়া spawn আইডি যে অনুরূপ।
exp_send
জন্য একটি উপনাম পাঠান .
exp_send_error
জন্য একটি উপনাম send_error .
exp_send_log
জন্য একটি উপনাম send_log .
exp_send_tty
জন্য একটি উপনাম send_tty .
exp_send_user
জন্য একটি উপনাম send_user .
exp_version -exit সংস্করণ
স্ক্রিপ্ট প্রত্যাশার বর্তমান সংস্করণের সাথে সামঞ্জস্যপূর্ণ নিশ্চিত করার জন্য দরকারী।
কোন আর্গুমেন্ট সঙ্গে, বর্তমান সংস্করণ আশা করা ফিরে এসেছে। এই সংস্করণ তারপর আপনার স্ক্রিপ্ট এনকোড করা হতে পারে। আপনি যদি আসলেই জানেন যে আপনি সাম্প্রতিক সংস্করণগুলির বৈশিষ্ট্যগুলি ব্যবহার করছেন না, তবে আপনি পূর্বের সংস্করণটি নির্দিষ্ট করতে পারেন।
সংস্করণ বিন্দু দ্বারা বিভাজিত তিন নম্বর গঠিত। প্রথম প্রধান সংখ্যা। স্ক্রিপ্ট সংস্করণ জন্য লেখা আশা করা একটি ভিন্ন প্রধান সংখ্যা প্রায় অবশ্যই কাজ করবে না। exp_version প্রধান সংখ্যা মেলে না যদি একটি ত্রুটি ফেরৎ।
দ্বিতীয়টি সংখ্যালঘু সংখ্যা। বর্তমান সংস্করণটির চেয়ে বড় সংখ্যক সংখ্যক সংস্করণের জন্য লিখিত স্ক্রিপ্টগুলি কিছু নতুন বৈশিষ্ট্যের উপর নির্ভর করে এবং এটি চলতে পারে না। exp_version প্রধান সংখ্যা মিললে একটি ত্রুটি প্রদান করে, তবে স্ক্রিপ্টটি সংখ্যালঘু সংখ্যা চলমান চলার চেয়ে বেশি আশা করা .
তৃতীয়টি একটি সংখ্যা যা সংস্করণের তুলনায় কোন অংশ না খেলে। তবে, যখন এটি বৃদ্ধি হয় আশা করা সফ্টওয়্যার বিতরণের যেকোন উপায়ে পরিবর্তিত হয়, যেমন অতিরিক্ত ডকুমেন্টেশন বা অপ্টিমাইজেশান। এটি প্রতিটি নতুন ছোটখাট সংস্করণে 0 তে পুনরায় সেট করা হয়।
সঙ্গে -exit পতাকা, আশা করা সংস্করণটি একটি ত্রুটি প্রিন্ট করে এবং সংস্করণটি যদি পুরনো হয়ে থাকে।
আশা করি -পোস্ট প্যাট 1 শরীর 1 … -অপস প্যান্ট দেহের
একটি প্যাটার্ন প্রক্রিয়া একটি আউটপুট প্রক্রিয়া আউটপুট মেলে, যতক্ষণ না একটি নির্দিষ্ট সময়সীমার পাস, অথবা একটি শেষ ফাইল দেখা হয়। চূড়ান্ত শরীর খালি থাকলে, এটি বাদ দেওয়া যেতে পারে।
সবচেয়ে সাম্প্রতিক থেকে প্যাটার্নস expect_before কমান্ড implicitly অন্য কোন নিদর্শন আগে ব্যবহার করা হয়। সবচেয়ে সাম্প্রতিক থেকে প্যাটার্নস expect_after কমান্ড implicitly অন্য কোন নিদর্শন পরে ব্যবহার করা হয়।
পুরো আর্গুমেন্ট যদি আশা করা বিবৃতিটি একাধিক লাইনের প্রয়োজন, সমস্ত আর্গুমেন্টগুলি এক "ব্রেসড" হতে পারে যাতে ব্যাকল্ল্যাশের সাথে প্রতিটি লাইন বন্ধ করা এড়াতে পারে। এই ক্ষেত্রে, স্বাভাবিক Tcl বিকল্পগুলি ধনুর্বন্ধনী সত্ত্বেও ঘটবে।
একটি প্যাটার্ন শব্দ যদি ফাইলের শেষে , সংশ্লিষ্ট শরীরের শেষ ফাইলের উপর মৃত্যুদন্ড কার্যকর করা হয়। একটি প্যাটার্ন শব্দ যদি সময় শেষ , সংশ্লিষ্ট শরীরের সময়সীমার উপর মৃত্যুদন্ড কার্যকর করা হয়। যদি কোন টাইমআউট কীওয়ার্ড ব্যবহার করা হয় না, একটি নিখুঁত নাল ক্রিয়া সময়সীমার উপর কার্যকর করা হয়। ডিফল্ট সময়সীমা 10 সেকেন্ডের হয় তবে সেট করা যেতে পারে, উদাহরণস্বরূপ 30, "সেট সময়সীমা 30" কমান্ডের মাধ্যমে। একটি অসীম সময়সীমার মান -1 দ্বারা মনোনীত করা যেতে পারে। একটি প্যাটার্ন শব্দ যদি ডিফল্ট , সংশ্লিষ্ট শরীরের সময়সীমার বা শেষ ফাইলের উপর মৃত্যুদন্ড কার্যকর করা হয়।
যদি একটি প্যাটার্ন মিল, তারপর সংশ্লিষ্ট শরীর মৃত্যুদন্ড কার্যকর করা হয়। আশা করা শরীরের ফলাফল (অথবা খালি স্ট্রিং যদি কোন প্যাটার্ন মিলিত হয়) প্রদান করে। একাধিক প্যাটার্ন মিলবে এমন ইভেন্টে, প্রথমে উপস্থিত হওয়া শরীরটি নির্বাচন করার জন্য ব্যবহৃত হয়।
প্রতিটি সময় নতুন আউটপুট আসে, এটি তালিকাভুক্ত করা হয় যাতে প্রতিটি প্যাটার্ন তুলনা করা হয়। সুতরাং, আপনি কোনও প্রম্পট হিসাবে প্রদর্শিত শেষ প্যাটার্নটি নিশ্চিত করার জন্য একটি ম্যাচের অনুপস্থিতিতে পরীক্ষা করতে পারেন। কোন প্রম্পট যেখানে পরিস্থিতিতে, আপনি ব্যবহার করতে হবে সময় শেষ (আপনি যদি নিজে নিজে ইন্টারঅ্যাক্ট করেন তবে ঠিক মত)।
প্যাটার্ন তিনটি উপায়ে উল্লেখ করা হয়। ডিফল্টরূপে, নিদর্শনগুলি Tcl এর সাথে নির্দিষ্ট করা হয় স্ট্রিং ম্যাচ কমান্ড। (এই ধরনের নিদর্শনগুলি সি-শেল রেগুলার এক্সপ্রেশনগুলির মতোই সাধারণত "গ্লোব" প্যাটার্ন হিসাবে উল্লেখ করা হয়)। দ্য -gl পতাকাটি অন্যথায় মিলিত হতে পারে এমন নিদর্শনগুলি সুরক্ষার জন্য ব্যবহার করা যেতে পারে আশা করা তাই করছেন থেকে পতাকা। "-" দিয়ে শুরু হওয়া যেকোনো প্যাটার্ন এইভাবে সুরক্ষিত হওয়া উচিত। ("-" দিয়ে শুরু হওয়া সমস্ত স্ট্রিং ভবিষ্যতের বিকল্পগুলির জন্য সংরক্ষিত।)
উদাহরণস্বরূপ, নিচের অংশটি একটি সফল লগইন দেখায়। (মনে রাখবেন যে গর্ভপাত করান স্ক্রিপ্ট অন্যত্র সংজ্ঞায়িত একটি পদ্ধতি হতে অনুমিত হয়।)
প্রত্যাশা {ব্যস্ত {ব্যস্ত রাখে n; exp_continue} ব্যর্থতা "অবৈধ পাসওয়ার্ড" বাতিল সময়সীমা বাতিল বাতিল}
কোথাও একটি চতুর্থ প্যাটার্ন প্রয়োজন হয় কারণ এটি একটি স্থান রয়েছে, যা অন্যথায় কর্ম থেকে প্যাটার্ন আলাদা করবে।একই কর্ম (যেমন তৃতীয় এবং চতুর্থ) সঙ্গে প্যাটার্ন আবার কর্ম তালিকা প্রয়োজন। এই regexp- শৈলী নিদর্শন ব্যবহার করে এড়ানো যেতে পারে (নীচে দেখুন)। Glob- শৈলী নিদর্শন গঠন সম্পর্কে আরও তথ্য Tcl ম্যানুয়াল পাওয়া যাবে।
Regexp- শৈলী নিদর্শন Tcl এর দ্বারা সংজ্ঞায়িত সিনট্যাক্স অনুসরণ regexp ("নিয়মিত অভিব্যক্তি" জন্য সংক্ষিপ্ত) কমান্ড। regexp নিদর্শন পতাকা সঙ্গে প্রবর্তিত হয় -re । আগের উদাহরণটি regexp ব্যবহার করে পুনঃলিখন করা যেতে পারে:
প্রত্যাশা {ব্যস্ত {ব্যস্ত রাখে n; exp_continue} -re "ব্যর্থ | অবৈধ পাসওয়ার্ড" টাইমআউট সংযুক্ত করা বাতিল করুন}
উভয় ধরনের নিদর্শন "অপরিকল্পিত" হয়। এর অর্থ হল নিদর্শনগুলি সমগ্র স্ট্রিংটির সাথে মেলে না তবে স্ট্রিংতে যেকোনো স্থানে মিলটি শুরু এবং শেষ করতে পারে (যতক্ষন না অন্যকিছু মেলে)। ^ একটি স্ট্রিং শুরুতে মিলতে ^ এবং শেষের সাথে মিলানোর জন্য $ ব্যবহার করুন। নোট করুন যে আপনি যদি স্ট্রিং শেষের জন্য অপেক্ষা না করেন তবে আপনার প্রতিক্রিয়াগুলি স্ট্রিংয়ের মাঝখানে সহজেই শেষ হতে পারে কারণ এটি উদ্দীপিত প্রক্রিয়া থেকে প্রতিচ্ছবি হয়। এখনও সঠিক ফলাফল উত্পাদন, আউটপুট অপ্রাকৃত দেখতে পারেন। সুতরাং, যদি আপনি একটি স্ট্রিং শেষে অক্ষরগুলি সঠিকভাবে বর্ণনা করতে পারেন তবে $$ ব্যবহার করা হয়।
উল্লেখ্য যে অনেক সম্পাদক, ^ এবং $ যথাক্রমে যথাক্রমে লাইনগুলির শুরু এবং শেষ। যাইহোক, প্রত্যাশা লাইন ভিত্তিক নয়, কারণ এই অক্ষরটি বর্তমানে মিলিং বাফারের প্রত্যাশায় ডেটাগুলির শুরু এবং শেষের সাথে (লাইনগুলির বিরোধিতা) মেলে। (এছাড়াও, নীচের নোটটি দেখুন "সিস্টেম আতঙ্ক।")
দ্য -ex পতাকা প্যাটার্ন একটি "সঠিক" স্ট্রিং হিসাবে মিলিত হতে হবে। *, ^, ইত্যাদি এর কোন ব্যাখ্যা করা হয়নি (যদিও স্বাভাবিক Tcl কনভেনশনগুলি এখনও পালন করা উচিত)। সঠিক নিদর্শন সবসময় অপরিকল্পিত হয়।
দ্য -nocase পতাকা আউটপুট এর বড় হাতের অক্ষর তুলনায় ছোট হাতের অক্ষর হিসাবে তুলনা করে। প্যাটার্ন প্রভাবিত হয় না।
আউটপুট পড়ার সময় 2000 বাইটেরও বেশি পূর্ববর্তী বাইটগুলি "ভুলে যাওয়া" হতে বাধ্য হতে পারে। এই ফাংশন সঙ্গে পরিবর্তিত হতে পারে match_max । (উল্লেখ্য যে অত্যধিক বড় মানগুলি প্যাটার্ন ম্যাটচারকে ধীর করে তুলতে পারে।) যদি patlist হয় full_buffer , যদি সংশ্লিষ্ট শরীর মৃত্যুদন্ড কার্যকর করা হয় match_max বাইট গ্রহণ করা হয়েছে এবং কোন অন্যান্য নিদর্শন মিলিত হয়েছে। কিনা বা না full_buffer শব্দ ব্যবহার করা হয়, ভুলে যাওয়া অক্ষর expect_out (বাফার) লেখা হয়।
যদি patlist শব্দ খালি , এবং nulls অনুমতি দেওয়া হয় (মাধ্যমে remove_nulls কমান্ড), যদি একটি ASCII 0 মিলিত হয় তবে সংশ্লিষ্ট শরীরটি কার্যকর হয়। Glob বা regexp প্যাটার্নের মাধ্যমে 0 বাইট মিলতে পারে না।
একটি প্যাটার্ন (অথবা eof বা full_buffer) সাথে মিললে, কোনও মিলিং এবং পূর্বে মিলিত আউটপুট পরিবর্তনশীল expect_out (বাফার) । পর্যন্ত 9 regexp সাবস্ট্রিং ম্যাচ পরিবর্তনশীল মধ্যে সংরক্ষিত হয় expect_out (1, STRING) মাধ্যমে expect_out (9, STRING) । যদি -indices পতাকা একটি প্যাটার্ন, শুরু এবং শেষ সূচক আগে (একটি ফর্ম জন্য উপযুক্ত lrange ) 10 স্ট্রিং ভেরিয়েবল মধ্যে সংরক্ষিত হয় expect_out (x, শুরু করেন) এবং expect_out (x, শেষ) যেখানে এক্স একটি অঙ্ক, বাফার মধ্যে পদার্থ অবস্থান অনুরূপ। 0 স্ট্রিংগুলিকে নির্দেশ করে যা সমগ্র প্যাটার্নের সাথে মিলে যায় এবং গ্লব নিদর্শনগুলির সাথে সাথে রেজেক্স প্যাটার্নগুলির জন্য তৈরি হয়। উদাহরণস্বরূপ, যদি কোন প্রক্রিয়া "abcdefgh n" এর আউটপুট উত্পাদিত করে, এর ফলাফল:
আশা করি "সিডি"
নিম্নোক্ত বিবৃতিগুলি কার্যকর করা হয়েছে যেমন:
expect_out (0, স্ট্রিং) সেট করুন cd set_out (বাফার) abcd সেট করুন
এবং "efgh n" আউটপুট বাফার বাকি আছে। একটি প্রক্রিয়া আউটপুট "abbbcabkkkka n" উত্পাদিত হলে, এর ফলাফল:
প্রত্যাশা-সূচক-re "বি (বি *)। * (কে +)"
নিম্নোক্ত বিবৃতিগুলি কার্যকর করা হয়েছে যেমন:
set_out (0, start) সেট করুন 1 set expect_out (0, end) 10 সেট expect_out (0, string) bbbcabkkkk set_out (1, start) 2 সেট expect_out (1, end) 3 সেট expect_out (1, string) bb set_out সেট করুন (2, শুরু) 10 সেট expect_out (2, শেষ) 10 সেট expect_out (2, স্ট্রিং) k সেট প্রত্যাশা_আউট (বাফার) abbbcabkkkk
এবং "একটি n" আউটপুট বাফার বাকি আছে। প্যাটার্ন "*" (এবং -re "। *") প্রক্রিয়া থেকে আর আউটপুট পড়া ছাড়াই আউটপুট বাফারটি ফ্লাশ করবে।
সাধারণত, মিলযুক্ত আউটপুট প্রত্যাশিত অভ্যন্তরীণ বাফার থেকে প্রত্যাহার করা হয়। এটি একটি প্যাটার্ন prefixing দ্বারা প্রতিরোধ করা হতে পারে -notransfer পতাকা। এই পতাকাটি পরীক্ষা করার ক্ষেত্রে বিশেষভাবে দরকারী (এবং পরীক্ষার সময় সুবিধার জন্য "না" -এ সংক্ষিপ্ত করা যেতে পারে)।
মেলা আউটপুট (বা eof বা full_buffer) সাথে যুক্ত spawn আইডি সংরক্ষিত হয় expect_out (spawn_id) .
দ্য -সময় শেষ ফ্ল্যাগটি বর্তমান প্রত্যাশা কমান্ডকে টাইমআউট ভেরিয়েবলের মান ব্যবহার করার পরিবর্তে নিম্নমানের মান হিসাবে নিম্নলিখিত মানটি ব্যবহার করে।
ডিফল্টরূপে, নিদর্শন বর্তমান প্রক্রিয়া থেকে আউটপুট বিরুদ্ধে মিলিত হয়, তবে -i পতাকা নামযুক্ত spawn_id তালিকা থেকে আউটপুট ঘোষণা নিম্নলিখিত নিদর্শন (পরবর্তী পর্যন্ত -i )। Spawn_id তালিকাটি spawn_ids এর একটি হোয়াইটস্পেস বিভাজিত তালিকা বা spawn_ids এর একটি তালিকা উল্লেখকারী একটি পরিবর্তনশীল হওয়া উচিত।
উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি বর্তমান প্রক্রিয়া থেকে "সংযুক্ত" বা $ busy2 দ্বারা নামযুক্ত spawn_id থেকে "ব্যস্ত", "ব্যর্থ" বা "অবৈধ পাসওয়ার্ড" অপেক্ষা করে।
{-i $ proc2 ব্যস্ত {ব্যস্ত রাখে n; exp_continue} -re "ব্যর্থ | অবৈধ পাসওয়ার্ড" টাইমআউট সংযুক্ত করা বাতিল করুন}
গ্লোবাল পরিবর্তনশীল মান any_spawn_id অন্য সকলের সাথে নামকরণ করা যে কোন spawn_ids নিদর্শন মেলে মেলে ব্যবহার করা যেতে পারে -i বর্তমান পতাকা আশা করা কমান্ড। একটি থেকে spawn_id -i কোন সংযুক্ত প্যাটার্ন সহ পতাকা (অর্থাত্, অন্যের দ্বারা অবিলম্বে অনুসরণ -i ) একই যে কোন অন্যান্য নিদর্শন পাওয়া যায় আশা করা সঙ্গে যুক্ত কমান্ড any_spawn_id।
দ্য -i পতাকাটি গ্লোবাল ভেরিয়েবলকেও নাম দিতে পারে যার মধ্যে পরিবর্তনশীল আইডির তালিকাটির জন্য পরিবর্তনশীল পাঠ করা হয়। পরিবর্তনশীল যখনই পরিবর্তনশীল পুনর্বিবেচনা করা হয়। কমান্ডটি কার্যকর হওয়ার সময় এটি আই / ও উৎস পরিবর্তন করার একটি উপায় সরবরাহ করে। স্পন আইডস এই ভাবে "পরোক্ষ" spawn আইডস বলা হয়।
যেমন কর্ম বিরতি এবং অবিরত কারণ নিয়ন্ত্রণ কাঠামো (যেমন, জন্য , proc ) স্বাভাবিক ভাবে আচরণ করা। আদেশ exp_continue অনুমতি আশা করা এটি স্বাভাবিকভাবেই ফিরে আসার পরিবর্তে নির্বাহ চালিয়ে চলতে থাকবে।
এই স্পষ্ট loops বা পুনরাবৃত্তি প্রত্যাশা বিবৃতি এড়ানো জন্য দরকারী। নিম্নলিখিত উদাহরণটি Rlogin স্বয়ংক্রিয়ভাবে একটি ফ্যাগমেন্টের অংশ। দ্য exp_continue একটি দ্বিতীয় লিখতে থাকার avoids আশা করা Rlogin পাসওয়ার্ডের জন্য অনুরোধ করলে বিবৃতি (আবার প্রম্পট সন্ধান করতে)।
$ হোস্টে {পাসওয়ার্ড: {stty -echo send_user "পাসওয়ার্ডটি ($ ব্যবহারকারীর জন্য):" expect_user -re "(। *) n" send_user " n" প্রেরণ করুন "$ expect_out (1, স্ট্রিং) r" স্টিকি echo exp_continue} ভুল {send_user "অবৈধ পাসওয়ার্ড বা অ্যাকাউন্ট n" প্রস্থান} সময়সীমা {send_user "$ হোস্টের সাথে সংযোগ বিচ্ছিন্ন হয়ে গেছে n" প্রস্থান} হোস্টে eof {send_user "সংযোগ ব্যর্থ হয়েছে: $ expect_out (buffer)" exit} - পুনরায় $ প্রম্পট}
উদাহরণস্বরূপ, নিম্নোক্ত ফ্যাগমেন্ট ব্যবহারকারীকে এমন একটি ইন্টারঅ্যাকশন গাইড করতে সহায়তা করতে পারে যা ইতিমধ্যে সম্পূর্ণরূপে স্বয়ংক্রিয়। এই ক্ষেত্রে, টার্মিনাল কাঁচা মোডে রাখা হয়। যদি ব্যবহারকারী "+" চাপে, একটি পরিবর্তনশীল বৃদ্ধি হয়। "P" চাপলে, প্রক্রিয়াটিতে বেশিরভাগ আয় পাঠানো হয়, সম্ভবত এটি কোনও উপায়ে পোকা করতে এবং "i" ব্যবহারকারীকে প্রক্রিয়াটির সাথে যোগাযোগ করতে দেয়, কার্যকরভাবে স্ক্রিপ্ট থেকে নিয়ন্ত্রণকে চুরি করে। প্রতিটি ক্ষেত্রে, দী exp_continue বর্তমান অনুমতি দেয় আশা করা বর্তমান কর্ম কার্যকর করার পর প্যাটার্ন মিলিয়ে চলতে।
স্টিটি কাঁচা-তেও expect_after {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "আমি" {ইন্টারঅ্যাক্ট; exp_continue} "প্রস্থান" প্রস্থান করুন}
গতানুগতিক, exp_continue সময়সীমার টাইমার রিসেট। টাইমার পুনরায় আরম্ভ করা হয় না, যদি exp_continue সঙ্গে বলা হয় -continue_timer পতাকা।
expect_after expect_args
অভিন্নভাবে কাজ করে expect_before যদি উভয় থেকে নিদর্শন ছাড়া আশা করা এবং expect_after ম্যাচ করতে পারেন, দী আশা করা প্যাটার্ন ব্যবহার করা হয়। দেখুন expect_before আরো তথ্যের জন্য কমান্ড।
expect_background expect_args
হিসাবে একই আর্গুমেন্ট লাগেআশা করা তবে তা অবিলম্বে ফিরে আসে। নতুন ইনপুট আসে যখন প্যাটার্ন পরীক্ষা করা হয়। নমুনাসময় শেষ এবংডিফল্ট অর্থহীন হয়expect_background এবং নীরবভাবে বাতিল করা হয়। অন্যথায়, দীexpect_background কমান্ড ব্যবহার করেexpect_before এবংexpect_after শুধু নিদর্শনআশা করা আছে।
কখনexpect_background কর্ম মূল্যায়ন করা হচ্ছে, একই spawn আইডি জন্য ব্যাকগ্রাউন্ড প্রক্রিয়াকরণ অবরুদ্ধ করা হয়। কর্ম সমাপ্ত হলে ব্যাকগ্রাউন্ড প্রক্রিয়াকরণ অবরোধ করা হয়। যখন ব্যাকগ্রাউন্ড প্রক্রিয়াকরণ অবরুদ্ধ হয়, তখন এটি করা সম্ভব (ফোরাম)আশা করা একই spawn আইডি।
এটি কার্যকর করা সম্ভব নয়আশা করা যখন একটিexpect_background নিষ্ক্রিয় করা হয়।expect_background একটি বিশেষ spawn আইডি একই spawn আইডি সঙ্গে একটি নতুন expect_background ঘোষণা করে মুছে ফেলা হয়। প্রকাশকexpect_background কোন প্যাটার্ন ব্যাকগ্রাউন্ডে নিদর্শন মেলে মেলে দেওয়া spawn আইডি অপসারণ করে।
expect_forefore expect_args
হিসাবে একই আর্গুমেন্ট লাগেআশা করা তবে তা অবিলম্বে ফিরে আসে। সবচেয়ে সাম্প্রতিক থেকে প্যাটার্ন-কর্ম জোড়াexpect_before একই spawn আইডি নিঃসন্দেহে নিম্নলিখিত কোন যোগ করা হয়আশা করা কমান্ড। যদি একটি