লিনাক্স / ইউনিক্স কমান্ডের আশা

প্রত্যাশা একটি প্রোগ্রাম যা একটি স্ক্রিপ্ট অনুযায়ী অন্যান্য ইন্টারেক্টিভ প্রোগ্রামের সাথে কথা বলে। স্ক্রিপ্ট অনুসরণ, একটি প্রোগ্রাম থেকে প্রত্যাশিত হতে পারে এবং সঠিক প্রতিক্রিয়া কি হওয়া উচিত জানি কি আশা। একটি ব্যাখ্যািত ভাষা ডায়ালগ নির্দেশিকা শাখা এবং উচ্চ স্তরের নিয়ন্ত্রণ কাঠামো উপলব্ধ করা হয়। উপরন্তু, ব্যবহারকারী নিয়ন্ত্রণ নিতে এবং সরাসরি যখন ইচ্ছা করতে পারেন, পরে স্ক্রিপ্ট নিয়ন্ত্রণ ফিরে।

Expectk একটি প্রত্যাশা এবং Tk এর মিশ্রণ এটা আশা এবং Tk এর ইচ্ছা মত আচরণ করে। আশা করা যায় Tcl ছাড়া C অথবা C ++ এ সরাসরি ব্যবহার করা যাবে।

নাম "প্রত্যাশা" uucp, kermit এবং অন্যান্য মডেম নিয়ন্ত্রণ প্রোগ্রাম দ্বারা জনপ্রিয় অনুক্রম পাঠানোর / আশা ধারণা থেকে আসে। যদিও উউপ্পের বিপরীতে, আশা করা হয় সাধারনতাই এটি একটি ব্যবহারকারী-স্তরের কমান্ড হিসাবে চালানো যেতে পারে যাতে কোনও প্রোগ্রাম এবং টাস্ক মনের সাথে কাজ করে। আশা করা যায় একই সময়ে বিভিন্ন প্রোগ্রামের সাথে কথা বলতে পারে।

কি আশা করতে পারি?

উদাহরণস্বরূপ, এখানে কিছু কমান্ড আশা করতে পারে:

শেল এই কাজগুলি করতে পারে না কেন বিভিন্ন কারণ আছে। সব আশা সঙ্গে সম্ভাব্য সম্ভব

সাধারনত, প্রোগ্রাম এবং ব্যবহারকারীর মধ্যে ইন্টারঅ্যাকশন প্রয়োজন এমন কোনও প্রোগ্রাম চালানোর জন্য প্রত্যাশা করা দরকারী। সব প্রয়োজনীয় যে মিথস্ক্রিয়া প্রোগ্রাম্যাটিকভাবে চিহ্নিত করা যাবে। আশা করা হচ্ছে নিয়ন্ত্রিত প্রোগ্রামটি বন্ধ না করেও ব্যবহারকারীকে নিয়ন্ত্রণ প্রদান করতে পারে। অনুরূপভাবে, ব্যবহারকারী যে কোনও সময় স্ক্রিপ্ট থেকে নিয়ন্ত্রণ ফেরত দিতে পারেন।

ব্যবহার

এক্সিকিউট কমান্ডের তালিকা জন্য cmdfile পড়া আশা। প্রত্যাশা সিস্টেমকে সমর্থন করে যেগুলি # সমর্থন করে! স্ক্রিপ্টটি এক্সিকিউটেবল হিসাবে স্ক্রিপ্টটি চিহ্নিত করে এবং স্ক্রিপ্টের প্রথম লাইনটি দ্বারা অঙ্কন করে:

#! / ইউএসআর / স্থানীয় / বিন / আশা-ফ

অবশ্যই, পথ অবশ্যই নির্ভুলভাবে বর্ণনা করবে যেখানে জীবনের প্রত্যাশা। / usr / local / bin শুধু একটি উদাহরণ।

-পি ফ্ল্যাগ স্ক্রিপ্টের যে কোনও কমান্ডটি চালানোর পূর্বে prefaces। শেল দ্বারা বিভক্ত করা প্রতিরোধ কমান্ড উদ্ধৃত করা উচিত এই বিকল্পটি বহুবার ব্যবহার করা হতে পারে। একক-সি দিয়ে একাধিক কমান্ড প্রয়োগ করা যেতে পারে সেগুলিকে সেমিকোলন দিয়ে পৃথক করে। ক্রমানুসারে তারা প্রদর্শিত আদেশ সঞ্চালিত হয়। Expectk ব্যবহার করে, এই বিকল্প হিসাবে-আদেশ হিসাবে নির্দিষ্ট করা হয়

-ডি ফ্ল্যাগ কিছু ডায়গনিস্টিক আউটপুট সক্ষম করে, যা প্রাথমিকভাবে যেমন কমান্ডের অভ্যন্তরীণ কার্যকলাপগুলি আশা করে এবং ইন্টারঅ্যাক্ট করে। এই পতাকাটি "Ex_internal 1" হিসাবে একটি প্রত্যাশিত স্ক্রিপ্টের শুরুতে একই প্রভাব রয়েছে, পাশাপাশি প্রত্যাশার সংস্করণ মুদ্রিত হয়।

-ডি পতাকা একটি ইন্টারেক্টিভ ডিবাগার সক্ষম করে। একটি পূর্ণসংখ্যা মান অনুসরণ করা উচিত। ডিফল্টটি পরবর্তী Tcl পদ্ধতির আগে নিয়ন্ত্রণ করবে যদি মানটি অ-শূন্য হয় অথবা যদি একটি ^ সি চাপানো হয় বা একটি ব্রেকপয়েন্ট হিট হয়, অথবা অন্যান্য উপযুক্ত ডিবাগার কমান্ডটি স্ক্রিপ্টে প্রদর্শিত হয়। Expectk ব্যবহার করে, এই বিকল্প হিসাবে নির্দিষ্ট করা হয় - ডিবাগ

-f পতাকা একটি ফাইল পছন্দ করে যা থেকে কমান্ডগুলি পড়তে হয় ফ্ল্যাগটি ঐচ্ছিক কারণ এটি # ব্যবহার করার সময় কেবলমাত্র দরকারী! নোট, যাতে অন্য আর্গুমেন্ট কমান্ড লাইন সরবরাহ করা যেতে পারে। Expectk ব্যবহার করার সময়, এই বিকল্পটি -file হিসাবে নির্দিষ্ট করা হয়

ডিফল্টরূপে, কমান্ড ফাইল মেমরিতে পড়া হয় এবং এটি সম্পূর্ণরূপে চালানো হয়। এটি একটি সময়ে এক লাইন ফাইল পড়ার মাঝে মাঝে উপভোগ্য। অবাধে ফাইলগুলিকে এই ভাবে পরিচালিত করার জন্য বাধ্য করার জন্য, -b পতাকাটি ব্যবহার করুন। Expectk ব্যবহার করে, এই বিকল্প হিসাবে -buffer হিসাবে নির্দিষ্ট করা হয়।

যদি স্ট্রিং একটি ফাইলের নাম হিসাবে সরবরাহ করা হয় তবে মান ইনপুট পরিবর্তে পড়া "-" হয়। প্রকৃতপক্ষে "-" নামে একটি ফাইল থেকে "./-" ব্যবহার করুন।

-আই ফ্ল্যাগগুলি একটি ফাইল থেকে পড়ার পরিবর্তে ইন্টারঅ্যাক্টিভ কমান্ডের জন্য প্রত্যাশা করে। প্রম্পটিং প্রস্থান কমান্ড দ্বারা বা EOF এর মাধ্যমে সমাপ্ত করা হয়। -i পতাকাটি যদি কোনও কমান্ড ফাইল না-সি ব্যবহার করা হয় তবে তা অনুমান করা হয়। Expectk ব্যবহার করে, এই বিকল্প-ইন্টারঅ্যাক্টিভ হিসাবে নির্দিষ্ট করা হয়।

- বিকল্পের শেষে বিভাজন করতে ব্যবহার করা যেতে পারে। এটি দরকারী যদি আপনি আপনার স্ক্রিপ্ট একটি বিকল্প মত মতামত পাশাপাশি প্রত্যাশা দ্বারা ব্যাখ্যা করা হচ্ছে না পাস করতে চান। এটি দরকারীভাবে # এ স্থাপন করা যাবে! প্রত্যাশা দ্বারা কোন পতাকা মত ব্যাখ্যা প্রতিরোধ লাইন। উদাহরণস্বরূপ, নিম্নলিখিত ভেরিয়েবল argv- এ স্ক্রিপ্টের নাম সহ মূল আর্গুমেন্টগুলি ত্যাগ করবে।

#! / ইউএসআর / স্থানীয় / বিন / আশা -

উল্লেখ্য, # আর্গুমেন্ট যোগ করার সময় স্বাভাবিক getopt (3) এবং execve (2) সম্মেলন পালন করা আবশ্যক! লাইন।

যদি ফাইলটি $ exp_library / hope.rc স্বয়ংক্রিয়ভাবে উপস্থিত হয় তবে যদি না -এন পতাকা ব্যবহার করা হয়। (Expectk ব্যবহার করার সময়, এই বিকল্পটিকে -NORC হিসাবে উল্লেখ করা হয়।) এর পরেই, ~ / .expect.rc ফাইলটি স্বয়ংক্রিয়ভাবে সোর্সড হয়, যদি না -n পতাকা ব্যবহার করা হয়। যদি পরিবেশগত পরিবর্তনশীল DOTDIR সংজ্ঞায়িত করা হয়, এটি একটি ডিরেক্টরি হিসাবে বিবেচনা করা হয় এবং .expect.rc এখান থেকে পড়া হয়। Expectk ব্যবহার করার সময়, এই বিকল্পটি -norc হিসাবে নির্দিষ্ট করা হয়। এই উত্সর্গীকৃত কোন -সি ফ্ল্যাগ নির্বাহ করার পরেই ঘটে।

-v কারণ তার সংস্করণ নম্বর প্রিন্ট এবং প্রস্থান করার আশা। এক্সপেক্টের সংশ্লিষ্ট ফ্ল্যাগ, যা লম্বা পতাকা নামগুলি ব্যবহার করে-উল্লিখিত হয়।

ঐচ্ছিক আর্গুমেন্ট একটি তালিকা মধ্যে নির্মিত এবং পরিবর্তনশীল named argv এবং সংরক্ষণ করা হয়। argc দৈর্ঘ্য আরম্ভ হয় argv।

যদি কোনও স্ক্রিপ্ট ব্যবহার না করা হয় তবে Argv0 স্ক্রিপ্ট বা বাইনারিের নাম হিসাবে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত স্ক্রিপ্ট এবং প্রথম তিনটি আর্গুমেন্টের নামটি প্রিন্ট করে:

send_user "$ argv0 [ল্যানঞ্জ $ argv 0 2] \ n"

কমান্ড

টুল কমান্ড ভাষা ব্যবহার করে প্রত্যাশা Tcl নিয়ন্ত্রণ প্রবাহ (যদি, জন্য, বিরতি), অভিব্যক্তি মূল্যায়ন এবং recursionand পদ্ধতি সংজ্ঞা হিসাবে অন্যান্য কিছু বৈশিষ্ট্য উপলব্ধ করা হয়। কমান্ড এখানে ব্যবহৃত কিন্তু সংজ্ঞায়িত না (সেট, যদি, exec) হয় Tcl কমান্ড। অতিরিক্ত কমান্ডের সমর্থন প্রত্যাশা অন্যথায় নির্দিষ্ট না থাকলে, কমান্ডগুলি খালি স্ট্রিংটি ফেরত দেয়।

কমান্ডগুলি বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয় যাতে তারা দ্রুত অবস্থিত হতে পারে। যাইহোক, নতুন ব্যবহারকারীরা স্প্যানের বিবরণ পড়তে শুরু করে, আশা করতে পারেন, আশা করতে পারেন, এবং সেই নির্দেশনায় ইন্টারঅ্যাক্ট করতে পারেন।

close [-slave] [-onexec 0 | 1] [-i spawn_id]

বর্তমান প্রক্রিয়া সংযোগ বন্ধ। অধিকাংশ ইন্টারেক্টিভ প্রোগ্রাম তাদের stdin এবং প্রস্থান থেকে EOF সনাক্ত করবে; এইভাবে প্রক্রিয়াটি সম্পূর্ণরূপে বন্ধ করে দেওয়ার জন্য সাধারণত বন্ধ হয়ে যায়। -আই পতাকা নামের spawn_id এর অনুরূপ বন্ধ করার প্রক্রিয়া ঘোষণা করে।

উভয়ই প্রত্যাশা করে এবং ইন্টারঅ্যাক্ট করবে যখন বর্তমান প্রক্রিয়ায় প্রবাহিত হবে এবং নিবিড়ভাবে বন্ধ করে দেবে, তবে আপনি "exec exec $ pid" দ্বারা প্রক্রিয়াটিকে খুন করলে, আপনি স্পষ্টভাবে ঘনিষ্ঠভাবে কল করতে চান

-অক্সিড ফ্ল্যাগ নির্ধারণ করে যে স্পন আইডি যেকোনো নতুন ফাংশনযুক্ত প্রসেসে বন্ধ থাকে বা প্রক্রিয়াটি overlayed হয় কিনা। একটি spawn id খোলা রাখতে, মান 0 ব্যবহার করুন। একটি অ-শূন্য পূর্ণসংখ্যা মান কোনও নতুন প্রসেসগুলিতে স্পন বন্ধ করে দেয়।

স্ল্যাভ ফ্ল্যাশ স্প্যান আইডি যুক্ত স্লেভ বন্ধ করে দেয়। সংযোগ বন্ধ হলে, স্লেভ স্বয়ংক্রিয়ভাবে বন্ধ হয়ে গেলেও এটি খোলা থাকলেও।

সংযোগ নিখুঁত বা স্পষ্টভাবে বন্ধ করা হয় কিনা কোন ব্যাপার, আপনি সংশ্লিষ্ট কার্নেল প্রক্রিয়া স্লট পরিষ্কার করার জন্য অপেক্ষা কল করা উচিত বন্ধ কমান্ডটি অপেক্ষা কল করা হয় না যে কোনও গ্যারান্টি নেই যে একটি প্রক্রিয়া সংযোগ বন্ধ করার ফলে এটি প্রস্থান করতে হবে।

ডিবাগ [[-now] 0 | 1]

একটি Tcl ডিবাগার নিয়ন্ত্রণ করে যা আপনাকে বিবৃতিগুলির মাধ্যমে ধাপে ধাপে এবং ব্রেকপয়েন্টগুলি সেট করতে দেয়।

কোনও আর্গুমেন্ট ছাড়াই, ডিবাগারটি চলমান না হলে 1 ফিরে পাওয়া যাবে, অন্যথায় 0 ফিরে পাওয়া যাবে।

একটি 1 যুক্তি সঙ্গে, ডিবাগার শুরু হয়। একটি 0 যুক্তি সঙ্গে, ডিবাগার বন্ধ করা হয়। যদি একটি 1 আর্গুমেন্ট -ও ফ্ল্যাগ দ্বারা পূর্বে হয়, ডিবাগারটি অবিলম্বে শুরু হয়। অন্যথায়, ডিবাগার পরবর্তী Tcl বিবৃতি দিয়ে শুরু হয়।

ডিবাগ কমান্ড কোন ফাঁদ পরিবর্তন করে না। -D পতাকা দিয়ে প্রত্যাশা শুরু করতে এটি তুলনা করুন।

সংযোগ বিচ্ছিন্ন কমান্ড টার্মিনাল থেকে একটি forked প্রক্রিয়াটি সংযোগ বিচ্ছিন্ন করে। এটি পটভূমিতে চলতে থাকে। প্রক্রিয়া তার নিজস্ব প্রক্রিয়া গ্রুপ দেওয়া হয়। স্ট্যান্ডার্ড I / O / dev / null এ পুনঃনির্দেশিত করা হয়

ব্যাকগ্রাউন্ডে স্ক্রিপ্ট চালানোর জন্য নিম্নোক্ত অংশটি সংযোগ বিচ্ছিন্ন করে ব্যবহার করে।

যদি {[ফোক]! = 0} সংযোগ বিচ্ছিন্ন করুন। । ।

নিম্নোক্ত স্ক্রিপ্টটি একটি পাসওয়ার্ড পড়ে এবং তারপর প্রতি ঘন্টায় একটি প্রোগ্রাম চালায় যা প্রতিটি বার চালানোর সময় একটি পাসওয়ার্ড দাবি করে। স্ক্রিপ্ট পাসওয়ার্ড সরবরাহ করে যাতে আপনি শুধুমাত্র একবার টাইপ করতে হবে।

send_user "password" \ "expect_user -re" (। *) \ n "for {} 1 {} {যদি {[ফোর্ক]! = 0} {ঘুম 3600; অবিরত করুন} সংযোগ বিচ্ছিন্ন করুন। 1, স্ট্রিং) \ r "। । । প্রস্থান}

শেল অসিঙ্ক্রোনাস প্রসেস বৈশিষ্ট্য (&) উপর সংযোগ বিচ্ছিন্ন করার জন্য একটি সুবিধা হল যে প্রত্যাশা টার্মিনাল পন্থাগুলি বিচ্ছিন্ন করার পূর্বে সংরক্ষণ করতে পারেন এবং পরে তাদের নতুন ptys প্রয়োগ। সঙ্গে &, প্রত্যাশা টার্মিনাল প্যারামিটার পড়ার একটি সুযোগ আছে না কারণ টার্মিনাল ইতিমধ্যে সময় সংযোগ বিচ্ছিন্ন করা হয় নিয়ন্ত্রণ পায়।

প্রস্থান [-পট] [অবস্থা]

কারণ এক্সপ্রেশন প্রত্যাহার বা অন্যথায় এটি করতে প্রস্তুত।

-অনলাইন ফ্ল্যাগটি একটি প্রস্থান হ্যান্ডলার হিসেবে ব্যবহার করার জন্য পরবর্তী আর্গুমেন্টটি তৈরি করে। একটি যুক্তি ছাড়াই, বর্তমান প্রস্থান হ্যান্ডলার ফিরে আসেন।

-নিক্সিট ফ্ল্যাডটি প্রস্থান করার জন্য প্রস্তুত হওয়ার প্রত্যাশা করে কিন্তু প্রকৃতপক্ষে অপারেটিং সিস্টেমে প্রকৃতপক্ষে নিয়ন্ত্রণ ফিরিয়ে দেওয়া বন্ধ করে দেয়। ব্যবহারকারী-সংজ্ঞায়িত প্রস্থান হ্যান্ডলারটি চালানোর পাশাপাশি প্রত্যাশা এর নিজস্ব অভ্যন্তরীণ হ্যান্ডলারগুলিও চালানো হয়। কোনও আরও Expect কমান্ডগুলি কার্যকর করা উচিত। আপনি যদি অন্যান্য Tcl এক্সটেনশনগুলির সাথে প্রত্যাশা পালন করছেন তবে এটি দরকারী। বর্তমান ইন্টারপ্রেটার (এবং পরিবেশিত পরিবেশে যদি প্রধান উইন্ডো থাকে) যাতে অন্য Tcl এক্সটেনশনগুলি পরিষ্কার করতে পারে। প্রত্যাশা এর প্রস্থান আবার বলা হয় (যদিও এটি ঘটতে পারে), হ্যান্ডলার rerun হয় না।

প্রস্থান করার পরে, উত্পন্ন প্রক্রিয়াগুলির সমস্ত সংযোগ বন্ধ থাকে। স্পানাযুক্ত প্রসেস দ্বারা ক্লোজারটি একটি EOF হিসাবে সনাক্ত করা হবে। প্রস্থান কোনও অন্যান্য কর্মের বাইরে যা সাধারণ _ এক্সট (2) পদ্ধতিটি বহন করে। এইভাবে, উত্পন্ন প্রক্রিয়াগুলি যে EOF এর জন্য পরীক্ষা করে না তা চলতে চলতে পারে। (বিভিন্ন শর্ত নির্ধারণ করা গুরুত্বপূর্ণ, উদাহরণস্বরূপ, একটি অজানা প্রক্রিয়াকে সংকেত প্রেরণ করা হবে, কিন্তু এইগুলি সিস্টেম-নির্ভর, সাধারণত প্রস্থান (3) অধীনে নথিভুক্ত করা হয়।) চালানো চলমান প্রক্রিয়াগুলি init দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত হবে।

অবস্থা (বা 0 যদি নির্দিষ্ট না থাকে) প্রত্যাশার প্রস্থানের স্থিতি হিসাবে ফেরত দেওয়া হয়। স্ক্রিপ্ট শেষে পৌঁছেছেন যদি প্রস্থান নির্বিশেষে সঞ্চালিত হয়।

exp_continue [-continue_timer]
কমান্ড exp_continue স্বাভাবিকভাবে প্রত্যাবর্তনের পরিবর্তে স্বয়ংক্রিয়ভাবে সঞ্চালন চালিয়ে যাওয়ার আশা করে। ডিফল্টরূপে exp_continue টাইমআউট টাইমার পুনরায় সেট করা হয়। -continue_timer ফ্ল্যাগ টাইমার পুনরায় আরম্ভ হতে বাধা দেয়। (আরও তথ্যের জন্য আশা দেখুন।)

exp_internal [-f ফাইল] মান
মূল্য অ-শূন্য হলে stderr আশা করার জন্য ডায়গনিস্টিক তথ্য অভ্যন্তরীণ পাঠানোর আরও কমান্ডের কারণ। মান 0 হলে এই আউটপুটটি নিষ্ক্রিয় করা হয় । ডায়গনিস্টিক তথ্য প্রতিটি চরিত্রটি প্রাপ্ত করে এবং নিদর্শনগুলির বিপরীতে বর্তমান আউটপুটকে মিলিত করার জন্য প্রতিটি প্রচেষ্টার অন্তর্ভুক্ত।

ঐচ্ছিক ফাইল সরবরাহ করা হলে, সমস্ত স্বাভাবিক এবং ডিবাগিং আউটপুট সেই ফাইলে লিখিত হয় ( মূল্যের মূল্য নির্বিশেষে)। কোনও পূর্ববর্তী ডায়গনিস্টিক আউটপুট ফাইলটি বন্ধ হয়ে গেছে।

-আইএফও ফ্ল্যাগ exp_internal দ্বারা প্রদত্ত সবচেয়ে সাম্প্রতিক অ-তথ্য আর্গুমেন্টগুলির বর্ণনা ফিরিয়ে দেয়।

exp_open [args] [-i spawn_id]
একটি Tcl ফাইল সনাক্তকারী প্রদান করে যা মূল স্প্যান আইডি এর সাথে সম্পর্কিত। ফাইল শনাক্তকারীটি তখন ব্যবহার করা যেতে পারে যেমনটি Tcl এর খোলা কমান্ড দ্বারা খোলা ছিল। (স্পান আইডি আর ব্যবহার করা উচিত নয়। একটি অপেক্ষা করা উচিত নয়।

এক্সপ্লোর কমান্ড দিয়ে অ্যাক্সেসের জন্য- লেভোওপেন ফ্ল্যাডটি স্পান আইডি খুলছে। একটি অপেক্ষা spawn আইডি এ কার্যকর করা আবশ্যক

exp_pid [-i spawn_id]
বর্তমানে উত্পন্ন প্রক্রিয়াটির সাথে সংশ্লিষ্ট প্রক্রিয়াটি আইডিটি ফেরত দেয়। যদি -i পতাকা ব্যবহার করা হয়, তবে পিডটি প্রদত্ত স্পান আইডিটির সাথে মিলিত হয়।

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 একটি ত্রুটি ফেরৎ।

দ্বিতীয়টি ছোটখাট নম্বর। বর্তমান সংস্করণের চেয়ে বেশি সংখ্যক সংখ্যক সংস্করণের জন্য লেখা স্ক্রিপ্টগুলি কিছু নতুন বৈশিষ্ট্যের উপর নির্ভর করে এবং চলতে পারে না। বড় সংখ্যা মেলে যদি এক্সপ্রেশন একটি ত্রুটি ফেরত দেয়, তবে স্ক্রিপ্টের ক্ষুদ্রতর সংখ্যাটি চলমান প্রত্যাশা তুলনায় অনেক বেশি।

তৃতীয়টি এমন একটি সংখ্যা যা সংস্করণ তুলনায় কোনও অংশে অংশ নেয় না। তবে, যখন বাড়তি ডকুমেন্টেশন বা অপ্টিমাইজেশান দ্বারা প্রত্যাশিত সফ্টওয়্যার বিতরণ পরিবর্তন করা হয় তখন এটি বাড়ায়। প্রতিটি নতুন ছোট সংস্করণে এটি 0 তে রিসেট করা হয়।

এক্সেট ফ্ল্যাগ দিয়ে, একটি ত্রুটি প্রিন্ট করে এবং প্রস্থান করে যদি সংস্করণটি পুরানো হয়।

আশা করি [[-পট] প্যাট 1 বডি 1] ... [-পট] প্যাথন [শরীর]
একটি নিদর্শন প্রক্রিয়াকরণের আউটপুটের সাথে মিলিত হওয়া পর্যন্ত অপেক্ষা করে, একটি নির্দিষ্ট সময়সীমা উত্তীর্ণ হয়, অথবা একটি ফাইলের শেষে প্রদর্শিত হয়। যদি চূড়ান্ত শরীর খালি থাকে তবে এটি বাদ যাবে।

সবচেয়ে সাম্প্রতিক প্রত্যাশা থেকে প্যাটার্নস- আগে কমান্ড অন্য কোন নিদর্শন আগে নিখুঁতভাবে ব্যবহৃত হয় সবচেয়ে সাম্প্রতিক প্রত্যাশা থেকে প্যাটার্নস- পরবর্তী কমান্ড নিছক অন্য কোন নিদর্শন পরে ব্যবহৃত হয়

পুরো প্রত্যাশার বক্তব্যের আর্গুমেন্ট একাধিক লাইনের প্রয়োজন হলে, সকল আর্গুমেন্টগুলি "ব্রা করা" হতে পারে যাতে একটি ব্যাকস্ল্যাশ দিয়ে প্রতিটি লাইনটি বন্ধ করা যায়। এই এক ক্ষেত্রে, ধনুর্বন্ধনী সত্ত্বেও স্বাভাবিক Tcl substitutions ঘটবে।

যদি একটি প্যাটার্ন কীওয়ার্ড eof হয় , সংশ্লিষ্ট ফাইলটি ফাইলের শেষে শেষ করা হয়। যদি একটি প্যাটার্ন কীওয়ার্ড টাইমআউট হয় , সংশ্লিষ্ট শরীরের সময়সীমা এ সঞ্চালিত হয় কোনও সময়সীমা শব্দ ব্যবহার করা হয় না, একটি অন্তর্নিহিত নাল কর্ম সময় সমাপ্তির উপর সঞ্চালিত হয়। ডিফল্ট সময়সীমা 10 সেকেন্ড কিন্তু সেট করা যেতে পারে, উদাহরণস্বরূপ 30 "কমান্ড টাইমআউট 30" কমান্ডের মাধ্যমে। একটি অসীম সময়সীমা মান 1 দ্বারা মনোনীত করা যেতে পারে। যদি কোনও প্যাটার্নটি কীওয়ার্ড ডিফল্ট হয় , তবে সংশ্লিষ্ট সংস্থাটি কোনও সময়সীমা বা শেষের ফাইল-এ প্রয়োগ করা হয়।

যদি একটি প্যাটার্ন মেলে, তাহলে সংশ্লিষ্ট শরীরের মৃত্যুদন্ড কার্যকর করা হয়। প্রত্যাশিত শরীরের ফলাফল ফেরত (বা খালি স্ট্রিং যদি কোন প্যাটার্ন মেলে না)। ঘটনা যে একাধিক প্যাটার্ন মেলে, একটি প্রথম আবির্ভূত একটি শরীরের নির্বাচন করতে ব্যবহৃত হয়।

প্রতিটি সময় নতুন আউটপুট আসে, এটি তালিকাভুক্ত করা হয় যাতে প্রতিটি প্যাটার্নের সাথে তুলনা করা হয়। এইভাবে, আপনি প্রদর্শিত একটি প্যাটার্ন কিছু, যেমন একটি প্রম্পট হিসাবে তৈরীর দ্বারা একটি ম্যাচ অনুপস্থিতির জন্য পরীক্ষা করতে পারেন। এমন পরিস্থিতিতে যেখানে কোন প্রম্পট নেই, আপনাকে অবশ্যই সময়সীমার ব্যবহার করতে হবে (যেমন আপনি নিজে নিজে ইন্টারঅ্যাক্ট করার সময়)।

প্যাটার্নস তিনটি উপায়ে নির্দিষ্ট করা হয়। ডিফল্টরূপে, Tcl এর স্ট্রিং মেল কমান্ড হিসাবে নিদর্শনগুলি নির্দিষ্ট করা হয়। (এই ধরনের নমুনা সি-শেল নিয়মিত এক্সপ্রেশনগুলির অনুরূপ যা সাধারণভাবে "গ্লব" নিদর্শন হিসাবে পরিচিত)। -গ্লগ পতাকাটি নিদর্শনগুলিকে সুরক্ষিত করার জন্য ব্যবহার করা যেতে পারে যা অন্যথায় এগুলি থেকে পতাকাগুলি প্রত্যাশার সম্মুখীন হতে পারে। "-" এর সাথে যে কোনও প্যাটার্নটি এই ভাবে সুরক্ষিত হওয়া উচিত। ("-" দিয়ে শুরু হওয়া সমস্ত স্ট্রিংগুলি ভবিষ্যতের বিকল্পগুলির জন্য সংরক্ষিত।)

উদাহরণস্বরূপ, নিম্নলিখিত অংশটি একটি সফল লগইনের জন্য দেখায়। (উল্লেখ্য যে স্ক্রিপ্ট অন্যত্র সংজ্ঞায়িত একটি প্রক্রিয়া হতে বিভাজনটি অনুমিত হয়।)

আশা {ব্যস্ত {ব্যস্ত রাখা} exp_continue} ব্যর্থ "অবৈধ পাসওয়ার্ড" বন্ধ করুন বন্ধের সময়সীমা আবদ্ধ করুন}

চতুর্থ প্যাটার্নে উদ্ধৃতিগুলি প্রয়োজন কারণ এটি একটি স্থান রয়েছে, যা অন্যথায় কর্ম থেকে প্যাটার্নটি পৃথক করবে। অনুরূপ কর্ম (যেমন 3 য় এবং 4 র্থ) সঙ্গে প্যাটার্নগুলি আবার কর্মের তালিকা প্রয়োজন। এটি regexp- শৈলী নিদর্শন (নিচে দেখুন) ব্যবহার করে এড়াতে পারে। গ্লব-শৈলী নকশার গঠন সম্পর্কে আরও তথ্য Tcl ম্যানুয়ালে পাওয়া যাবে।

Regexp- শৈলী নিদর্শন Tcl এর regexp দ্বারা সংজ্ঞায়িত সিনট্যাক্স অনুসরণ ("নিয়মিত এক্সপ্রেশন" জন্য সংক্ষিপ্ত) কমান্ড regexp নিদর্শন পতাকা সঙ্গে চালু করা হয় -re পূর্ববর্তী উদাহরণটি regexp ব্যবহার করে পুনরায় লেখা হতে পারে:

আশা {ব্যস্ত {ব্যস্ত রাখা} exp_continue} -র "ব্যর্থ | অবৈধ পাসওয়ার্ড" বন্ধ করুন বন্ধের সময়সীমা আবদ্ধ করুন}

উভয় ধরনের নিদর্শন "অনির্বাচিত" হয় এর মানে হল যে প্যাটার্নগুলি সম্পূর্ণ স্ট্রিংের সাথে মেলেনি, তবে স্ট্রিং (যেহেতু অন্য সব মিলিয়ে) যতক্ষণ পর্যন্ত ম্যাচটি শুরু এবং শেষ করতে পারে। একটি স্ট্রিং এর প্রারম্ভে মিলিত করার জন্য ^ ব্যবহার করুন, এবং $ শেষের সাথে মিলবে। লক্ষ্য করুন যে যদি আপনি স্ট্রিংয়ের শেষের জন্য অপেক্ষা করেন না, তবে আপনার প্রতিক্রিয়া সহজেই স্ট্রিং এর মাঝখানে শেষ হতে পারে, কারণ তারা উত্পন্ন প্রক্রিয়া থেকে প্রতিধ্বনিত হয়। সঠিক ফলাফল এখনও উৎপাদনের সময়, আউটপুট অপ্রাকৃত দেখতে পারে সুতরাং, যদি আপনি একটি স্ট্রিং শেষে অক্ষর বর্ণনা করতে পারেন $ এর ব্যবহার উত্সাহ দেওয়া হয়।

লক্ষ্য করুন যে অনেক সম্পাদকদের মধ্যে, ^ এবং $ যথাক্রমে লাইনের প্রারম্ভ এবং শেষের সাথে মেলে যাইহোক, কারণ প্রত্যাশা লাইন ভিত্তিক নয়, এই অক্ষরগুলি মিলিত বাফারের মধ্যে বর্তমানে তথ্য এবং লাইনের (শেষের মত) মিলের সাথে মেলে। (এছাড়াও "সিস্টেম অপব্যবহার" এ নীচের নোটটি দেখুন।)

-X ফ্ল্যাশটি একটি "সঠিক" স্ট্রিং হিসাবে প্যাটার্নের সাথে মিলে যাবে। *, ^, ইত্যাদি কোন ব্যাখ্যা করা হয় না (যদিও স্বাভাবিক Tcl নিয়মাবলী এখনও দেখা উচিত)। সঠিক নিদর্শন সবসময় unanchored হয়।

-নেটোর পতাকা আউটপুট অক্ষরগুলি তুলনা করে তুলতে তুলনা করে তুলতে পারে যেমন তারা ছোট হাতের অক্ষর। প্যাটার্ন প্রভাবিত হয় না।

আউটপুট পড়ার সময়, 2000 বাইটেরও বেশি বাইটগুলি "বাম" হওয়ার আগে বাইটকে বাধ্য করতে পারে। এটি ফাংশন match_max এর সাথে পরিবর্তিত হতে পারে (মনে রাখবেন যে অত্যধিক বড় মানগুলি প্যাটার্ন ম্যাটারকে ধীর করে দিতে পারে।) যদি প্যাটেলস্টটি পূর্ণ_বফার হয়, তবে ম্যাভ_ম্যাক্স বাইটগুলি পেয়ে গেলে সংশ্লিষ্ট সংস্থাটি চালানো হয় এবং অন্য কোনও প্যাটার্ন মিলে যায় না। Full_buffer কীওয়ার্ড ব্যবহার করা হয় কিনা বা না, ভুলে যাওয়া অক্ষর expect_out (বাফার) এ লেখা হয়।

যদি প্যাট নিবন্ধটি নাল হয় , এবং nulls অনুমোদিত হয় ( remove_nulls কমান্ডের মাধ্যমে), সংশ্লিষ্ট একটি সংস্থা চালানো হয় যদি একটি একক ASCII 0 মিলে যায়। গ্লব বা রেজক্সপি প্যাটার্নগুলির মাধ্যমে 0 টি বাইট মেলে না।

একটি প্যাটার্ন (বা eof বা full_buffer) মিলে গেলে, কোন matching এবং পূর্বে অপ্রত্যাশিত আউটপুট পরিবর্তনশীল expect_out (বাফার) এ সংরক্ষণ করা হয়Expect_out (9, স্ট্রিং) এর মাধ্যমে ভেরিয়েবল expect_out (1, স্ট্রিং) পর্যন্ত 9 regexp স্যবহার ম্যাচগুলিতে সংরক্ষণ করা হয়। যদি প্যাটার্নের পূর্বে -সম্পাদনা পতাকা ব্যবহার করা হয়, তবে 10 টি স্ট্রিং এর শুরু এবং শেষ সূচকগুলি ( লজেন্সের জন্য উপযুক্ত ফর্মের মধ্যে) ভেরিয়েবলের ভেরিয়েবলের মধ্যে সংরক্ষিত হয়_একটি (এক্স, শুরু) এবং expect_out (এক্স, শেষ) যেখানে এক্স হল ডিজিট, বাফারের অস্থায়ী অবস্থানের সাথে মিলিত। 0 টি স্ট্রিংগুলি বোঝায় যা সমগ্র প্যাটার্নের সাথে মিলে যায় এবং গ্লব নিদর্শনগুলির সাথে সাথে রেজক্সপি নিদর্শনগুলির জন্য তৈরি হয়। উদাহরণস্বরূপ, যদি একটি প্রক্রিয়া "abcdefgh \ n" এর আউটপুট উত্পন্ন করে, তাহলে এর ফলাফল:

আশা করি "সিডি"

যেমন নিম্নলিখিত বিবৃতি কার্যকর ছিল:

set_out (0, স্ট্রিং) সিডি সেট expect_out (বাফার) abcd সেট করুন

এবং "efgh \ n" আউটপুট বাফারের মধ্যে অবশিষ্ট থাকে। যদি একটি প্রক্রিয়া আউটপুট উত্পাদিত "abbbcabkkkka \ n", এর ফলাফল:

আশা-ইন্ডিয়ার -র "বি (বি *)। * (k +)"

যেমন নিম্নলিখিত বিবৃতি কার্যকর ছিল:

সেট expect_out (0, শুরু) 1 সেট expect_out (0, শেষ) 10 সেট expect_out (0, স্ট্রিং) bbbcabkkkk সেট expect_out (1, শুরু) 2 সেট expect_out (1, শেষ) 3 সেট expect_out (1, স্ট্রিং) বিবি সেট expect_out (2, শুরু) 10 সেট expect_out (2, শেষ) 10 সেট expect_out (2, স্ট্রিং) k সেট expect_out (বাফার) abbbcabkkkk

এবং "a \ n" আউটপুট বাফারের মধ্যে অবশিষ্ট থাকে। প্যাটার্ন "*" (এবং -র "। *") প্রক্রিয়া থেকে কোনও আউটপুট পড়ার ছাড়াই আউটপুট বাফারকে ফ্লাশ করবে।

স্বাভাবিকভাবে, মিলিত আউটপুট প্রত্যাশা এর অভ্যন্তরীণ buffers থেকে বাতিল করা হয়। এই -notransfer পতাকা দিয়ে একটি প্যাটার্ন প্রিফিক্সিং দ্বারা প্রতিরোধ করা যেতে পারে। এই পতাকাটি পরীক্ষা করার জন্য বিশেষভাবে উপযোগী (এবং পরীক্ষা করার সময় সুবিধার জন্য "নয়" এ সংক্ষেপ করা যেতে পারে)

মিলিত আউটপুট (বা eof বা full_buffer) এর সাথে যুক্ত স্পন আইডি expect_out (spawn_id) এ সংরক্ষণ করা হয়।

টাইমআউট ভেরিয়েবলের মান ব্যবহার করার পরিবর্তে টাইমআউট ফ্ল্যাগটি বর্তমান প্রত্যাশা কমান্ডকে নিম্নোক্ত মান ব্যবহার করার সময় একটি টাইমআউট হিসাবে ব্যবহার করে।

ডিফল্টভাবে, বর্তমান প্রক্রিয়ায় আউটপুটের সাথে প্যাটার্ন মিলিত হয়, তবে -আই ফ্লাড নামক spawn_id তালিকা থেকে আউটপুট ঘোষণা করে যে কোনও নিম্নলিখিত নিদর্শনগুলির সাথে মিলেছে (পরবর্তী -i পর্যন্ত )। Spawn_id তালিকাটি spawn_ids এর একটি সাদা স্পেস বিভাজিত তালিকা হতে পারে বা spawn_ids- এর তালিকাতে একটি পরিবর্তনশীল উল্লেখ করবে।

উদাহরণস্বরূপ, নিম্নোক্ত উদাহরণ $ proc2 দ্বারা নামমাত্র spawn_id থেকে বর্তমান প্রক্রিয়ায়, "ব্যস্ত", "ব্যর্থ" বা "অবৈধ পাসওয়ার্ড" থেকে "সংযুক্ত" জন্য অপেক্ষা করে।

আশা করি {-i $ proc2 ব্যস্ত থাকা অবস্থায় ব্যস্ত থাকে \ n; exp_continue} -র "ব্যর্থ | অবৈধ পাসওয়ার্ড" বন্ধ করুন বন্ধের সময়সীমা আবদ্ধ করুন}

গ্লোবাল ভেরিয়েবলের মানটি যেকোন spawn_ids- এর সাথে প্যাটার্নের সাথে মিল করার জন্য ব্যবহার করা যেতে পারে যা বর্তমান প্রত্যাশা কমান্ডের অন্যান্য সমস্ত -আই পতাকাগুলির সাথে নামকরণ করা হয়। কোনও পছন্দের (যেমন, অন্যটি -i দ্বারা অবিলম্বে অনুসরণ করা হয়) সাথে A -i পতাকা থেকে spawn_id অন্য যেকোন নমুনার সাথে যে কোনও_স্প্পান_আইএইডের সাথে যুক্ত একই আদেশের মধ্যে উপলব্ধ করা হয়

-আই ফ্ল্যাগটি একটি গ্লোবাল ভেরিয়েবলের নাম দিতে পারে যার মধ্যে স্প্যানড আইডিগুলির তালিকার জন্য ভেরিয়েবলটি পড়া হয়। পরিবর্তনশীল যখনই এটি পরিবর্তন হয় তখন এটি পুনর্বিন্যস্ত হয়। এই কমান্ডটি কার্যকর করার সময় I / O উৎস পরিবর্তন করার একটি উপায় উপলব্ধ করা হয়। স্প্যান আইডগুলি এই ভাবে প্রদান করা হয়েছে "অনগ্রসর" স্প্যান আইড।

ক্রিয়া যেমন বিরতি এবং অবিরত নিয়ন্ত্রণ কাঠামোগুলি (অর্থাৎ, জন্য , proc ) স্বাভাবিক ভাবে আচরণ করতে। কমান্ড exp_continue স্বাভাবিকভাবে প্রত্যাবর্তনের পরিবর্তে স্বয়ংক্রিয়ভাবে সঞ্চালন চালিয়ে যাওয়ার আশা করে।

এই স্পষ্ট loops বা পুনরাবৃত্তি আশা বিবরণী এড়ানো জন্য দরকারী। নিম্নলিখিত উদাহরণ rlogin স্বয়ংক্রিয় করার জন্য একটি টুকরা অংশ। Rlogin একটি পাসওয়ার্ডের জন্য অনুরোধ জানায় যদি exp_continue দ্বিতীয় প্রত্যাশা বিবৃতি (প্রম্পটটি পুনরায় সন্ধান করতে) লিখতে থাকাকালীন এড়িয়ে চলে।

$ হোস্টে {পাসওয়ার্ড: {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 (বাফার)" exit} - পুনরায় $ প্রম্পট}

উদাহরণস্বরূপ, নিম্নোক্ত টুকরাটি একটি ব্যবহারকারীর নির্দেশিকাকে সহায়তা করতে পারে যা ইতিমধ্যেই সম্পূর্ণ স্বয়ংক্রিয়। এই ক্ষেত্রে, টার্মিনালটি কাঁচা মোডে রাখা হয়। যদি ব্যবহারকারী "+" চাপায়, একটি পরিবর্তনশীল বৃদ্ধি করা হয়। যদি "পি" চাপানো হয়, তবে অনেক রিটার্ন প্রক্রিয়াতে প্রেরণ করা হয়, সম্ভবত এটি কোন ভাবেই ঠেকাতে পারে না এবং "i" ব্যবহারকারীকে প্রক্রিয়াটির সাথে ইন্টারঅ্যাক্ট করতে দেয়, কার্যকরভাবে স্ক্রিপ্ট থেকে নিয়ন্ত্রণকে চুরি করে। প্রতিটি ক্ষেত্রে, exp_continue বর্তমান কর্ম সঞ্চালনের পরে বর্তমান প্যাটার্ন মিলন চলতে চলতে প্রত্যাশা করে।

stty raw -echo 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_be কমান্ড দেখুন

প্রত্যাশা_ ব্যাকগ্রাউন্ড [আশা_ার্জ]
আশা করি একই আর্গুমেন্ট লাগে, তবে এটি অবিলম্বে ফিরে আসে নতুন ইনপুট আসে যখন প্যাটার্ন পরীক্ষা করা হয়। প্যাটার্নের সময়সীমা এবং ডিফল্ট প্রত্যাশা_ ব্যাকগ্রাউন্ডের অর্থহীন এবং নিঃশব্দে প্রত্যাহার করা হয়। অন্যথা, expect_background কমান্ডের মতই expect_before expectation- এর আগে এবং আশা করা হয়- ঠিক যেমন আশা আছে।

যখন expect_background কর্মগুলি মূল্যায়ন করা হচ্ছে তখন একই স্প্যান আইডিটির জন্য ব্যাকগ্রাউন্ড প্রক্রিয়াকরণ বন্ধ করা হয়। কর্ম সম্পন্ন হলে ব্যাকগ্রাউন্ড প্রক্রিয়াকরণ নিষ্ক্রিয় করা হয়। যখন ব্যাকগ্রাউন্ড প্রক্রিয়াকরণটি অবরুদ্ধ থাকে তখন একই ফোনের আইডিটি (ফোরগ্রাউন্ড) আশা করা সম্ভব।

একটি প্রত্যাশা_ ব্যাকground অবরোধ করা হয় যখন একটি আশা চালানো সম্ভব নয়। একটি নির্দিষ্ট spawn ID এর জন্য প্রত্যাশা_ ব্যাকগ্রাউন্ড একই spawn ID এর সাথে একটি নতুন প্রত্যাশা_ ব্যাকগ্রাউন্ড ঘোষণা করে মুছে ফেলা হয়। কোনও প্যাটার্নের সাথে প্রত্যাশার প্রত্যাশাকে প্রত্যাবর্তন করে প্রদত্ত স্পন আইডিটি পটভূমিতে প্যাটার্নগুলির সাথে মেলে এমন ক্ষমতা থেকে সরিয়ে দেয়।

[expect_args]
আশা করি একই আর্গুমেন্ট লাগে, তবে এটি অবিলম্বে ফিরে আসে প্যাটার্ন-অ্যাকশন জোড়ার সাম্প্রতিকতম expectations- এর আগে একই spawn id- এর সাথে কোনও নিম্নলিখিত কমান্ডের আশা করা হয় । যদি একটি প্যাটার্ন মেলে, এটি বিবেচিত হয় যেমন আশা কমান্ড নিজেই নির্দিষ্ট করা হয়েছে, এবং সংযুক্ত শরীরের আশা কমান্ডের প্রেক্ষাপটে সঞ্চালিত হয়। যদি উভয় থেকে অনুমান আগে এবং প্রত্যাশিত তুলনা করতে পারেন, প্রত্যাশা আগে প্যাটার্ন ব্যবহার করা হয়।

কোন প্যাটার্ন নির্দিষ্ট করা হয় না, স্পন আইডি কোনও নিদর্শন জন্য চেক করা হয় না।

যদি একটি -i পতাকা দ্বারা অপেক্ষমান না থাকে, তাহলে expect_before কমান্ড কার্যকর করার সময় (যখন তার প্যাটার্ন মেলে না)।

-আইএফও ফ্ল্যাড প্রত্যাশার অপেক্ষা করছে- এটি কোনও নকশার সাথে মিলবে তা বর্তমান স্পেসিফিকেশনের প্রত্যাবর্তন করার আগে। ডিফল্টরূপে, এটি বর্তমান স্পন আইডিটি রিপোর্ট করে। যে স্পন আইডি তথ্যের জন্য একটি ঐচ্ছিক স্প্যান আইডি স্পেসিফিকেশন দেওয়া যেতে পারে উদাহরণ স্বরূপ

প্রত্যাশা- আগে-ইনফো -আই $ proc

সর্বাধিক এক স্প্যান আইডি স্পেসিফিকেশন দেওয়া যেতে পারে। ফ্ল্যাগ-নির্দেশক প্রত্যক্ষ স্পন আইডগুলিকে অকার্যকর করে যা শুধুমাত্র পরোক্ষ বৈশিষ্ট্যের মাধ্যমে আসে।

স্পন আইডি স্পেসিফিকেশনের পরিবর্তে, "সমস্ত" পতাকাটি "স্পাই্ন আইড" -এ প্রতিবেদন করার জন্য "ইনফো" হিসাবে বর্ণনা করবে।

-আইফো ফ্ল্যাডের আউটপুটকে পূর্বাভাস দেওয়ার পূর্বের যুক্তি হিসেবে পুনরায় ব্যবহার করা যেতে পারে।

আশা_থ [আশা_ার্জ]
আশা যেমন হয় কিন্তু এটি / dev / tty (অর্থাৎ ব্যবহারকারী থেকে কীস্ট্রোক) থেকে অক্ষরগুলি পড়ে। ডিফল্টভাবে, পড়া প্যাকড মোডে সঞ্চালিত হয়। এইভাবে, তাদের দেখতে দেখতে প্রত্যাবর্তনের জন্য একটি রেখা দিয়ে লাইন শেষ হওয়া উচিত। এটি স্টিকি এর মাধ্যমে পরিবর্তিত হতে পারে (নীচে স্টাইটি কমান্ডটি দেখুন)।

প্রত্যুত্তর
আশা যেমন হয় কিন্তু এটি stdin থেকে অক্ষরগুলি পড়তে পারে (অর্থাৎ ব্যবহারকারী থেকে কীস্ট্রোক)। ডিফল্টভাবে, পড়া প্যাকড মোডে সঞ্চালিত হয়। এইভাবে, তাদের দেখতে দেখতে প্রত্যাবর্তনের জন্য একটি রেখা দিয়ে লাইন শেষ হওয়া উচিত। এটি স্টিকি এর মাধ্যমে পরিবর্তিত হতে পারে (নীচে স্টাইটি কমান্ডটি দেখুন)।

কাঁটাচামচ
একটি নতুন প্রক্রিয়া তৈরি করে নতুন প্রক্রিয়ায় বর্তমান প্রত্যাশা প্রক্রিয়ার একটি সঠিক কপি। সাফল্যের সময়ে, কাঁটাটি নতুন (চাইল্ড) প্রক্রিয়া থেকে 0 লাগে এবং মূল প্রক্রিয়াটির প্রসেস IDটি প্যারেন্ট প্রসেসে ফেরৎ দেয় । ব্যর্থতা (অস্থায়ীভাবে সম্পদ অভাব, উদাহরণস্বরূপ, অদলবদল স্থান, মেমরি), ফর্ক ফেরৎ প্যারেন্ট প্রসেস -1 থেকে, এবং কোন সন্তানের প্রক্রিয়া তৈরি করা হয় না।

ফোকিক প্রক্রিয়াকরণ প্রস্থান কমান্ডের মাধ্যমে প্রস্থান করে , ঠিক যেমন মূল প্রসেস । ফর্কযুক্ত প্রসেস লগ ফাইলগুলিতে লিখতে অনুমোদিত। আপনি বেশিরভাগ প্রসেসে ডিবাগিং বা লগিং অক্ষম না করলে ফলাফল বিভ্রান্তিকর হতে পারে।

কিছু পিটি বাস্তবায়ন একাধিক পাঠক এবং লেখকদের দ্বারা বিভ্রান্ত হতে পারে, এমনকি মুহূর্তে। সুতরাং, প্রবক্তা প্রসেসের আগে এটি কাঁধে নিরাপদ।

[string1 body1] ... [স্ট্রিন [bodyn]] সাথে যোগাযোগ করুন
ব্যবহারকারীর বর্তমান প্রক্রিয়াকে নিয়ন্ত্রণ করে, যাতে কীস্ট্রোক বর্তমান প্রক্রিয়ায় পাঠানো হয়, এবং বর্তমান প্রক্রিয়াটির stdout এবং stderr ফিরে পাওয়া যায়।

স্ট্রিং-শরীরের জোড়গুলিকে আর্গুমেন্ট হিসাবে উল্লেখ করা যেতে পারে, যখন সংশ্লিষ্ট স্ট্রিংটি প্রবেশ করার সময় শরীরটি কার্যকর করা হয়। (ডিফল্টরূপে, স্ট্রিংটি বর্তমান প্রক্রিয়ায় পাঠানো হয় না।) দোভাষীর কমান্ড ধারণ করা হয়, যদি চূড়ান্ত শরীরটি অনুপস্থিত থাকে।

যদি পুরো ইন্টারঅ্যাক্টের বক্তব্যের আর্গুমেন্টগুলি একাধিক লাইনের প্রয়োজন হয়, তবে সকল আর্গুমেন্টগুলি "ব্রা করা" হতে পারে যাতে একটি ব্যাকস্ল্যাশ দিয়ে প্রতিটি লাইনটি বন্ধ করা যায়। এই এক ক্ষেত্রে, ধনুর্বন্ধনী সত্ত্বেও স্বাভাবিক Tcl substitutions ঘটবে।

উদাহরণস্বরূপ, নিম্নোক্ত কমান্ডটি নিম্নোক্ত স্ট্রিং-শরীরের জোড়া সংজ্ঞার সাথে ইন্টারঅ্যাক্ট করে: যখন ^ Z চাপা হয়, প্রত্যাশাকে সাসপেন্ড করা হয়। (টার্মিনাল মোড পুনঃস্থাপিত করার জন্য -Retet flag)। ^ A চাপা হলে, ব্যবহারকারী "আপনি একটি নিয়ন্ত্রণ-A টাইপ করেছেন" এবং প্রক্রিয়াটি একটি ^ A পাঠানো হয়। যখন $ চাপানো হয়, তখন ব্যবহারকারী তারিখটি দেখে। যখন ^ সি চাপানো হয়, প্রস্থানগুলি প্রত্যাশা করুন । "Foo" প্রবেশ করানো হলে, ব্যবহারকারী "বার" দেখেন। যখন ~ ~ চাপানো হয়, প্রত্যাশা ইন্টারপ্রেটার আন্তঃক্রমে চালায়।

সেট করুন CTRLZ \ 032 ইন্টারঅ্যাক্ট করুন {-Retet $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "আপনি একটি নিয়ন্ত্রণ টাইপ করেছেন- A \ n"; "{001}" পাঠান $ {send_user} "তারিখটি [ঘড়ি বিন্যাস [ঘড়ি সেকেন্ডে]]।"} \ 003 প্রস্থান foo {send_user "bar"} ~~}

স্ট্রিং-শরীরের জোড়াগুলিতে, স্ট্রিংগুলিকে আর্গুমেন্টগুলির তালিকাভুক্ত করা ক্রম অনুসারে মিলিত হয়। আংশিকভাবে মেলে যে স্ট্রিং বাকি আসছে প্রত্যাশা বর্তমান প্রক্রিয়া পাঠানো হয় না। যদি চরিত্রগুলি এমনভাবে প্রবেশ করা হয় যে আর সম্ভবত কোনও ম্যাচ হতে পারে না, তবে কেবলমাত্র স্ট্রিংের অংশ পাঠানো হবে যা অন্য কোনও ম্যাচের শুরু করতে পারবে না। এইভাবে, আংশিক মিলের সাবস্ট্রিংস যে স্ট্রিং পরে মেলে, ম্যাচ শেষ করার প্রচেষ্টা ছিল মূল স্ট্রিং শেষ পর্যন্ত ব্যর্থ হয়।

ডিফল্টরূপে, স্ট্রিং মিলে যাওয়া কোন ওয়াইল্ড কার্ডের সাথে সঠিক নয়। (বিপরীতে, প্রত্যাশিত আদেশটি ডিফল্টরূপে গ্লব-শৈলী পদ্ধতি ব্যবহার করে।) -x পতাকাটি এমন প্যাটার্নগুলির সুরক্ষার জন্য ব্যবহার করা যেতে পারে যা অন্যথায় এগুলি থেকে ইন্টারঅ্যাক্ট ফ্ল্যাগগুলি মেলে। "-" এর সাথে যে কোনও প্যাটার্নটি এই ভাবে সুরক্ষিত হওয়া উচিত। ("-" দিয়ে শুরু হওয়া সমস্ত স্ট্রিংগুলি ভবিষ্যতের বিকল্পগুলির জন্য সংরক্ষিত।)

স্ট্রিংকে স্ট্রিংকে রেজক্সপ -স্টাইলের প্যাটার্ন হিসাবে ব্যাখ্যা করা হয়। এই ক্ষেত্রে, মিলে যাওয়া substrings ভেরিয়েবল interact_out এ সংরক্ষণ করা হয় একইভাবে একইভাবে প্রত্যাশিত expect_out মধ্যে তার আউটপুট সঞ্চয় সঞ্চয় উপায়। -ইডওয়ার্ড পতাকা একইভাবে সমর্থিত।

প্যাটার্ন eof এমন একটি এক্সপ্রেশন চালু করে যা শেষ ফাইল-এর উপর চালানো হয়। একটি পৃথক eof প্যাটার্ন এছাড়াও আউটপুট পতাকা অনুসরণ করতে পারে যা ক্ষেত্রে এটি একটি আউটপুট লেখার সময় একটি eof সনাক্ত করা হয় সঙ্গে মিলেছে যেখানে। ডিফল্ট eof কর্ম "রিটার্ন" হয়, যাতে ইন্টারঅ্যাক্ট কেবল কোনো EOF উপর ফিরে আসে।

প্যাটার্নের সময়সীমা একটি সময়সীমা (সেকেন্ডের মধ্যে) এবং কোনও অক্ষরের নির্দিষ্ট সময়ের জন্য পড়ার পরে যে ক্রিয়াটি সম্পাদিত হয় তা উপস্থাপন করে। টাইমআউট প্যাটার্নটি সম্প্রতি নির্দিষ্ট প্রক্রিয়াতে প্রযোজ্য। কোন ডিফল্ট সময়সীমা নেই বিশেষ পরিবর্তনশীল "সময়সীমা" ( আশা কমান্ড দ্বারা ব্যবহৃত) এই সময়সীমার উপর কোন প্রভাব ফেলেনি।

উদাহরণস্বরূপ, নিম্নোক্ত বিবৃতি ব্যবহারকারীদের স্বতঃপ্রণোদিত করতে ব্যবহার করা যেতে পারে যারা একটি ঘণ্টা জন্য কিছু টাইপ করেনি কিন্তু যারা এখনও ঘন ঘন সিস্টেম বার্তা পান:

ইন্টারঅ্যাক্ট-ইনপুট $ user_spawn_id সময়সীমা 3600 রিটার্ন-আউটপুট \ $ spawn_id

যদি প্যাটার্নটি শব্দের নাল হয় , এবং nulls অনুমোদিত হয় ( remove_nulls কমান্ডের মাধ্যমে), সংশ্লিষ্ট একটি সংস্থা চালানো হয় যদি একটি একক ASCII 0 মিলে যায়। গ্লব বা রেজক্সপি প্যাটার্নগুলির মাধ্যমে 0 টি বাইট মেলে না।

ফ্ল্যাড- ভ্রাতটির সাথে একটি প্যাটার্ন তৈরি করার ফলে পরিবর্তনশীল ইন্টারঅ্যাক্ট_আউট (spawn_id) স্পান_আইডের সাথে সেট করা হয় যা প্যাটার্ন (অথবা eof) এর সাথে মিলে যায়।

ক্রিয়া যেমন বিরতি এবং অবিরত নিয়ন্ত্রণ কাঠামোগুলি (অর্থাৎ, জন্য , proc ) স্বাভাবিক ভাবে আচরণ করতে। যাইহোক ফিরে আসার কারণেই তার কলারের কাছে ফিরে আসার জন্য ইন্টারঅ্যাক্ট হয়, যখন ইন্টার-রিটার্ন কারনে তার কলারের কাছে রিটার্ন ফেরত দেয়। উদাহরণস্বরূপ, যদি "proc foo" বলা হয় যা ক্রিয়াটি ক্রিয়াটি সম্পাদন করে তখন Inter_return , proc foo ফিরে আসবে। (এই অর্থ যদি ইন্টারপ্রেট কল ইন্টারপ্রেটার আন্তঃক্রমে টাইপ রিটার্ন ইন্টারঅ্যাক্ট অবিরত করতে হবে, Inter_return তার কলার ফিরে প্রত্যাবর্তন কারণ হবে।)

ইন্টারঅ্যাক্ট করার সময়, কাঁচা মোড ব্যবহার করা হয় যাতে সমস্ত অক্ষর বর্তমান প্রক্রিয়ায় প্রেরণ করা যায়। বর্তমান প্রক্রিয়া কাজ নিয়ন্ত্রণ সংকেত ধরা না হলে, একটি স্টপ সংকেত পাঠানো হলে এটি বন্ধ হবে (ডিফল্ট ^ Z)। এটি পুনরায় চালু করতে, একটি অবিরত সংকেত প্রেরণ করুন (যেমন "kill -CONT" দ্বারা)। যদি আপনি সত্যিই একটি SIGSTOP পাঠাতে চান যেমন একটি প্রক্রিয়া (দ্বারা ^ Z), প্রথমে csh বানান এবং তারপর আপনার প্রোগ্রামটি চলছে। অন্যদিকে, যদি আপনি নিজেকে প্রত্যাশা করার জন্য একটি SIGSTOP পাঠাতে চান, প্রথমে কল দোভাষী (সম্ভবত একটি অব্যাহতির অক্ষর ব্যবহার করে), এবং তারপর ^ Z চাপুন

স্ট্রিং-শরীরের জোড়াগুলি ইন্টারপ্রেটারটি লিখতে এবং ইন্টারঅ্যাকটিভ কমান্ডগুলি চালানোর জন্য এড়িয়ে চলার জন্য একটি আচ্ছাদন হিসাবে ব্যবহার করা যেতে পারে। পূর্ববর্তী টার্মিনাল মোড ব্যবহার করা হয় যখন একটি স্ট্রিং-শরীরের জোড়া শরীরের চালানো হচ্ছে।

গতির জন্য, ডিফল্টরূপে কাঁচা মোডে কর্ম চালানো। -সেট ফ্ল্যাগটি মোডের টার্মিনালে রিসেট করা হয়েছে যা পূর্বে ইন্টারঅ্যাক্ট করা হয়েছিল (অবিচ্ছিন্নভাবে, রান্না করা মোড)। মনে রাখবেন যে মোডটি স্যুইচ করা হচ্ছে তখন অক্ষরগুলি প্রবেশ করা যাবে (কিছু সিস্টেমে টার্মিস্টার ড্রাইভারের একটি দুর্ভাগ্যজনক বৈশিষ্ট্য)। রিসেট করার একমাত্র কারণটি হল যদি আপনার ক্র্যাক পিকড মোডে চলার উপর নির্ভর করে।

-echo পতাকা এমন অক্ষর প্রেরণ করে যা নিম্নলিখিত প্যাটার্নের সাথে প্রক্রিয়াটিকে পুনরাবৃত্তির সাথে মিলিত করে যা প্রতিটি চরিত্রের মতই প্রকাশ করে। আংশিকভাবে টাইপ করা প্যাটার্নগুলি থেকে প্রতিক্রিয়া দেখতে ব্যবহারকারী যখন প্রয়োজন তখন এটি কার্যকর হতে পারে।

যদি একটি প্যাটার্ন প্রতিধ্বনিত হয় কিন্তু অবশেষে মেলেনি ব্যর্থ, অক্ষর উত্পন্ন প্রক্রিয়া পাঠানো হয়। যদি উত্পন্ন প্রক্রিয়া তারপর তাদের প্রতিধ্বনি করে, ব্যবহারকারী দুটি অক্ষর দেখতে হবে। -চুপো সম্ভবত পরিস্থিতিতে উপযুক্ত যেখানে ব্যবহারকারী প্যাটার্ন সম্পূর্ণ না অসম্ভব। উদাহরণস্বরূপ, নিম্নোক্ত উদ্ধৃতাংশটি rftp- এর, recursive-ftp স্ক্রিপ্ট থেকে, যেখানে ব্যবহারকারীকে ~ g, ~ p, অথবা ~ l প্রবেশ করার জন্য অনুরোধ করা হয়, বর্তমান লিঙ্কে পুনরাবৃত্তির জন্য তালিকাভুক্ত করা, রাখা বা তালিকাভুক্ত করা। এইগুলি সাধারণ FTP কমান্ডগুলি থেকে এতদূর যে, ব্যবহারকারীর টাইপ করা অসম্ভাব্য ~ অনুসরণ করে অন্য কোনও কিছুর পরেও, ভুলক্রিপ্ন ছাড়া, সেক্ষেত্রে তারা সম্ভবত ফলাফলটিও উপেক্ষা করবে।

{-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -চো ~ পি {putcurdirectory}} যোগাযোগ করুন

-নবফার ফ্ল্যাব অক্ষরগুলি পাঠায় যা অক্ষরগুলি পড়ার পরে আউটপুট প্রক্রিয়াতে নিম্নলিখিত প্যাটার্নের সাথে মেলে।

এটি দরকারী যখন আপনি একটি প্রোগ্রাম প্যাটার্ন ফিরে ইকো করতে চান। উদাহরণস্বরূপ, কোনও ব্যক্তির ডায়ালিং করাতে নিরীক্ষণের জন্য নিম্নলিখিতটি ব্যবহার করা হতে পারে (একটি হেইস-স্টাইল মোডেম)। প্রতিটি সময় "এডডি" স্ক্রিপ্ট দেখায় যে লাইনটি বাকি রেখাটি।

proc lognumber {} {interact -nobuffer -re "(। *) \ r" রিটার্ন $ লগ ​​রাখে "[ঘড়ি বিন্যাস [ঘড়ি সেকেন্ড]]: dialed $ interact_out (1, স্ট্রিং)"} ইন্টারঅ্যাক্ট-নবফার "এড" লগইন

ইন্টারঅ্যাক্ট করার সময়, log_user এর আগের ব্যবহারের উপেক্ষা করা হয়। বিশেষ করে, মিথস্ক্রিয়াটি তার আউটপুটকে লগ করা (মান আউটপুটে পাঠানো) থেকে সরাতে বাধ্য করবে কারণ এটি অনুমান করা হয় যে ব্যবহারকারী অন্ধভাবে যোগাযোগ করতে চায় না।

-এ পতাকা বর্তমান প্রক্রিয়াটির আউটপুটের জন্য নিম্নলিখিত কী-শরীরের জোড়া প্রয়োগ করা হয়। এটি দরকারী হতে পারে, উদাহরণস্বরূপ, একটি টেলনেট সেশনের সময় অযাচিত অক্ষরগুলি প্রেরণকারী হোস্টগুলির সাথে আচরণ করার সময়।

ডিফল্টরূপে, ইন্টারঅ্যাক্টটি আশা করে যে ব্যবহারকারী স্টেডিিন লিখতে এবং প্রত্যাশা প্রক্রিয়া নিজেই stdout পড়তে পারে। -U পতাকা ("ব্যবহারকারী" এর জন্য) ব্যবহারকারীকে তার যুক্তি দ্বারা প্রক্রিয়াকৃত প্রসেস হিসাবে ইন্টারঅ্যাক্ট করে তোলে (যা একটি স্পাড আইডি হওয়া আবশ্যক)।

এটি স্পষ্ট লুপ ব্যবহার না করেই দুটি সম্পর্কিত প্রসেসগুলিকে একত্রিত হতে অনুমতি দেয়। ডিবাগিং এ সহায়তা করতে, নির্ণায়ক সর্বদা স্টਡਰর (বা নির্দিষ্ট লগিং এবং ডিবাগিং তথ্য জন্য stdout) যান। একই কারণে, ইন্টারপ্রেটার কমান্ডটি স্টান্ডিন থেকে ইন্টারঅ্যাকটিভভাবে পড়বে।

উদাহরণস্বরূপ, নিম্নলিখিত টুকরা একটি লগইন প্রক্রিয়া তৈরি করে । তারপর এটি ব্যবহারকারী (না দেখানো) ডায়াল করে, এবং অবশেষে একসঙ্গে দুটি সংযোগ করে। অবশ্যই, কোনও প্রক্রিয়া লগইন করার জন্য প্রতিস্থাপিত হতে পারে। একটি শেল, উদাহরণস্বরূপ, ব্যবহারকারী একটি অ্যাকাউন্ট এবং পাসওয়ার্ড সরবরাহ ছাড়া কাজ করতে অনুমতি দেবে।

স্পন লগইন সেট লগইন $ spawn_id স্পন টিপ মোডেম # ব্যবহারকারীকে ডায়াল করুন # ব্যবহারকারীকে ইন্টারঅ্যাক্ট-ই $ লগইন লগইন করতে সংযুক্ত করুন

একাধিক প্রসেসে আউটপুট প্রেরণ করতে, একটি আউটপুট পতাকা দ্বারা প্রবাহিত প্রতিটি স্পন আইডি তালিকাটি তালিকাভুক্ত করুন। আউটপুট স্পান আইডের একটি গ্রুপের জন্য ইনপুট একটি স্পন আইডি তালিকা দ্বারা নির্ধারিত হতে পারে যা একটি ইনপুট ফ্ল্যাগ দ্বারা প্রযোজিত । (উভয়- ইনপুট এবং -আউটপুট অনুরূপ আকারে তালিকাটি নিতে পারে যেমন -i ফ্ল্যাগ আশা কমান্ডে, অন্য যে কোনও স্প্যানই_ইড ইন্টারঅ্যাক্টের মধ্যে অর্থবহ নয়।) নিম্নলিখিত সমস্ত ফ্ল্যাগগুলি এবং স্ট্রিংগুলি (বা প্যাটার্নগুলি) এই ইনপুটের ক্ষেত্রে প্রয়োগ করা হয় - ইনপুট পতাকা প্রদর্শিত হবে। যদি কোন- ইনপুট প্রদর্শিত হয়, -আউটপুট বোঝায় "-আইম্পট $ user_spawn_id -output" (একইভাবে, নিদর্শনগুলির সাথে যে- ইনপুট আছে না।) যদি এক- ইন্ট্রিপয়েন্ট নির্দিষ্ট করা হয় তবে এটি $ user_spawn_id কে অগ্রাহ্য করে একটি দ্বিতীয় ইনপুট নির্দিষ্ট করা হলে, এটি $ spawn_id কে অগ্রাহ্য করে। অতিরিক্ত- ইনপুট পতাকা উল্লেখ করা যেতে পারে।

দুটি নিখরচায় ইনপুট তাদের আউটপুট $ spawn_id এবং $ user_spawn_id (বিপরীত দিকে) হিসাবে নির্দিষ্ট করার জন্য ডিফল্টভাবে প্রক্রিয়া করে। যদি কোন- ইনপুট পতাকা নোট-আউটপুট পতাকা সহ প্রদর্শিত হয়, তবে সেই প্রক্রিয়া থেকে অক্ষরগুলি বাতিল করা হয়।

-i পতাকাটি বর্তমান spawn_id এর জন্য প্রতিস্থাপন করে যখন অন্য কোন -ইনপুট বা- আউটপুট পতাকা ব্যবহার করা হয় না। A -i পতাকাটি A -o পতাকা নির্দেশ করে

পরোক্ষ স্পন আইডিগুলি ব্যবহার করে প্রক্রিয়াগুলি পরিবর্তন করা সম্ভব। (পরোক্ষ স্পন আইডিগুলি অনুমানের কমান্ডের অংশে বর্ণনা করা হয়েছে।) পরোক্ষ স্পন আইডি -i, -u, -input, অথবা -output flags এর সাথে নির্দিষ্ট করা যেতে পারে।

দোভাষী
ব্যবহারকারীকে প্রত্যাশা এবং Tcl কমান্ডের জন্য ইন্টারঅ্যাক্টিভ প্রম্পট হওয়ার কারণ প্রতিটি কমান্ডের ফলাফল মুদ্রিত হয়।

ক্রিয়া যেমন বিরতি এবং অবিরত নিয়ন্ত্রণ কাঠামোগুলি (অর্থাৎ, জন্য , proc ) স্বাভাবিক ভাবে আচরণ করতে। যাইহোক রিটার্ন দোভাষীর তার কলারের কাছে ফেরত পাঠায় , যখন ইন্টার-রটারটি দোভাষীকে তার কলারের কাছে ফেরত দিতে দেয়। উদাহরণস্বরূপ, যদি "proc foo" দোভাষাকে বলা হয় যা ক্রিয়াটি ক্রিয়াটি সম্পাদন করে , proc foo ফিরে আসবে অন্য কমান্ডের সাহায্যে ইন্টারপ্রেটার নতুন কমান্ডের জন্য অনুরোধ প্রত্যাখ্যান করে।

ডিফল্টরূপে, প্রম্পটে দুটি পূর্ণসংখ্যা রয়েছে প্রথম পূর্ণসংখ্যা মূল্যায়ন স্ট্যাকের গভীরতার (যেমন, কত বার Tcl_Eval বলা হয়েছে) বর্ণনা করে। দ্বিতীয় পূর্ণসংখ্যা হচ্ছে Tcl ইতিহাসের পরিচয়পত্র। প্রম্পট "প্রম্পট 1" নামক একটি পদ্ধতি নির্ধারণ করে সেট করা যেতে পারে যার ফিরিয়ে নেওয়ার মান পরবর্তী প্রম্পট হয়ে যায়। যদি একটি বিবৃতিটি খোলা উদ্ধৃতি, অভিপ্রায়, ধনুর্বন্ধনী, বা বন্ধনী, একটি দ্বিতীয় প্রম্পট (ডিফল্ট "+>") দ্বারা নতুন লাইনে জারি করা হয়। "Prompt2" নামক একটি পদ্ধতি নির্ধারণ করে দ্বিতীয় প্রম্পট সেট করা যেতে পারে।

দোভাষী সময়, পিকড মোড ব্যবহার করা হয়, এমনকি যদি তার কলারটি কাঁচা মোড ব্যবহার করে।

যদি স্টডিন বন্ধ হয়ে থাকে, যদি না-ই- ফাফ ব্যবহৃত হয় তবে ইন্টারপ্রেটারটি প্রত্যাবর্তন করা হবে, যার ক্ষেত্রে পরবর্তী যুক্তিটি প্রয়োগ করা হবে।

log_file [args] [[-a] ফাইল)
যদি একটি ফাইলের নাম দেওয়া হয় তবে log_file ফাইলের সেশনের একটি প্রতিলিপি (সেই সময়ে শুরু হবে) রেকর্ড করবে। log_file রেকর্ডিং বন্ধ হবে যদি কোনও যুক্তি দেওয়া হয় না। কোনও পূর্ববর্তী লগ ফাইলটি বন্ধ করা আছে।

একটি ফাইলের নাম পরিবর্তনের পরিবর্তে, একটি Tcl ফাইল সনাক্তকারীকে -পেন বা -লিভোপন পতাকা ব্যবহার করে সরবরাহ করা হতে পারে। এটি স্পন কমান্ডের অনুরূপ। (আরো তথ্যের জন্য ফোয়ারা দেখুন।)

Log_user কমান্ড দ্বারা লগ-ইন করার জন্য একটি ফ্ল্যাগ বাহিনী আউটপুট লগ- ইন করা হয়েছে

ডিফল্টভাবে, log_file কমান্ডটি তাদের সরিয়ে দেওয়ার পরিবর্তে পুরানো ফাইলগুলিকে সংযুক্ত করে, লগিং বন্ধ করতে সক্ষম হওয়ার এবং এক সেশনে একাধিক বার চালু করার সুবিধার জন্য। ফাইলগুলি ছাঁকাতে , -nappend পতাকা ব্যবহার করুন।

-আইফো ফ্ল্যাগটি log_file দ্বারা প্রদত্ত সবচেয়ে সাম্প্রতিক অ-তথ্য আর্গুমেন্টের বর্ণনা ফিরিয়ে দিতে ব্যবহৃত হয়।

log_user-info | 0 | 1
ডিফল্টরূপে, প্রেরণ / আশা সংলাপটি stdout- এ লগ-ইন করা হয় (এবং খোলা অবস্থায় একটি লগফাইল)। Stdout- এ লগিং "log_user 0" কমান্ড দ্বারা অক্ষম করা হয়েছে এবং "log_user 1" দ্বারা পুনরায় সক্রিয় করা হয়েছে। লগ ফাইলের লগিং অপরিবর্তিত রয়েছে।

-আইফো ফ্ল্যাগটি log_user দ্বারা প্রদত্ত সবচেয়ে সাম্প্রতিক অ-তথ্য আর্গুমেন্টের বিবরণ ফিরিয়ে দিতে ব্যবহৃত হয়।

match_max [-ড] [-i spawn_id] [আকার]
অন্তর্বর্তী দ্বারা ব্যবহার করে বাফারের আকার (বাইটে) নির্ধারণ করে। কোন আকার যুক্তি ছাড়াই, বর্তমান আকারটি ফিরে এসেছে

-d পতাকা দিয়ে, ডিফল্ট আকার সেট করা হয়। (প্রাথমিক ডিফল্ট 2000 হয়।) -i পতাকা দিয়ে, আকারটি স্প্যান আইডির জন্য সেট করা হয়, অন্যথায় এটি বর্তমান প্রক্রিয়ায় সেট করা হয়।

overlay [- # spawn_id] [- # spawn_id] [...] প্রোগ্রাম [আরজি]
বর্তমান প্রত্যাশা প্রোগ্রামের পরিবর্তে "প্রোগ্রামের আর্গুম" সঞ্চালিত করে যা সমাপ্ত হয়। একটি জোড় হাইফেন যুক্তি কমান্ডের নামের সামনে হাইফেনকে বাধ্য করে যেমন এটি একটি লগইন শেল ছিল। সমস্ত spawn_ids বন্ধ করা হয়, যাদেরকে আর্গুমেন্ট বলা হয়। এই নামযুক্ত ফাইল সনাক্তকারীর উপর ম্যাপ করা হয়।

আগত নতুন প্রোগ্রামের জন্য শনাক্তকারী ফাইলগুলি সনাক্ত করার জন্য Spawn_ids ম্যাপ করা হয়। উদাহরণস্বরূপ, নিম্নোক্ত রেখাটি দাবা চালায় এবং এটি বর্তমান প্রক্রিয়া দ্বারা নিয়ন্ত্রিত হতে দেয় - বলুন, একটি দাবা মাস্টার।

ওভারলে -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id দাবা

এটি "ইন্টারঅ্যাক্ট-উ" এর তুলনায় আরো কার্যকরী, তবে এটি প্রোগ্রামের সাথে যোগাযোগের ক্ষমতা বজায় রাখে, যেহেতু প্রত্যাশা প্রক্রিয়া নিয়ন্ত্রণের মধ্যে নেই

উল্লেখ্য যে কোন নিয়ন্ত্রন টার্মিনাল প্রদান করা হয়। এইভাবে, যদি আপনি আদর্শ ইনপুট সংযোগ বিচ্ছিন্ন বা রিপাট করেন, তবে কাজের নিয়ামক (শেল, লগইন, ইত্যাদি) প্রোগ্রামগুলি সঠিকভাবে কাজ করবে না।

প্যারিটি [-ড] [-i spawn_id] [মান]
সংজ্ঞায়িত করে যে প্যারেন্টিটি বজায় রাখা প্রসেসগুলির আউটপুট থেকে আটকানো বা ছিন্ন করা উচিত কিনা। যদি মূল্য শূন্য হয়, সমতুল্য ছিনতাই হয়, অন্যথায় এটি ছিনতাই হয় না। কোন মূল্য যুক্তি ছাড়াই, বর্তমান মান ফিরে এসেছে।

ডি- পতাকা সহ, ডিফল্ট প্যারিটি মান সেট করা হয়। (প্রাথমিক ডিফল্ট হল 1, অর্থাৎ, প্যারিটিটি খালি করা হয় না।) -i পতাকা দিয়ে, প্যারিটি মান নামযুক্ত spawn id এর জন্য সেট করা হয়, অন্যথায় এটি বর্তমান প্রক্রিয়ায় সেট করা হয়।

remove_nulls [-ড] [-i spawn_id] [মান]
সংজ্ঞায়িত করে যে nulls বজায় রাখা হয় বা ফাঁকা প্রক্রিয়াগুলির আউটপুট থেকে প্যাটার্ন প্যাটার্ন বা ভেরিয়েবল expect_out বা interact_out এ সংরক্ষণ করার আগে। যদি মান 1 হয়, তাহলে বাতিল করা হয়মান 0 হলে, নালগুলি সরানো হয় না কোন মূল্য যুক্তি ছাড়াই, বর্তমান মান ফিরে এসেছে।

ডি- পতাকা সহ, ডিফল্ট মান সেট করা হয়। (প্রাথমিক ডিফল্ট হল 1, অর্থাৎ, nulls সরানো হয়।) -i পতাকা সঙ্গে, মান নামক spawn আইডি জন্য সেট করা হয়, অন্যথায় এটি বর্তমান প্রক্রিয়া জন্য সেট করা হয়।

নাকি অপসারণ করা হয় না, প্রত্যাশিত লগ এবং stdout এ নাল বাইট রেকর্ড করবে।

[- ফ্ল্যাগ] স্ট্রিং পাঠান
বর্তমান প্রক্রিয়ায় স্ট্রিং পাঠায়। উদাহরণস্বরূপ, কমান্ড

"হ্যালো ওয়ার্ল্ড \ r" পাঠান

অক্ষর, helloworld বর্তমান প্রক্রিয়ায় পাঠায়। (Tcl এর মধ্যে একটি printf- মত কমান্ড ( ফরম্যাট নামক) রয়েছে যা অনির্দিষ্টভাবে জটিল স্ট্রিং তৈরি করতে পারে।)

অক্ষরগুলি অবিলম্বে প্রেরণ করা হয় তবে লাইন-বুফার ইনপুট সহ প্রোগ্রামগুলি অক্ষরগুলি পড়বে না যতক্ষণ না ফেরত অক্ষরে পাঠানো হয়। একটি প্রত্যাবর্তন অক্ষর "\ r" চিহ্নিত করা হয়।

- পতাকাটি পরের যুক্তিকে একটি পতাকা ছাড়াই একটি স্ট্রিং হিসাবে ব্যাখ্যা করতে বাধ্য করে। যে কোনও স্ট্রিংটি পূর্বে "-" দ্বারা প্রযোজিত হতে পারে কিনা তা আসলে একটি পতাকা হিসাবে দেখায় এটি এমন একটি নির্ভরযোগ্য প্রক্রিয়া প্রদান করে যা পরিবর্তনশীল স্ট্রিংগুলিকে নির্দিষ্ট করে দেয় না। ("-" দিয়ে শুরু হওয়া সমস্ত স্ট্রিংগুলি ভবিষ্যতের বিকল্পগুলির জন্য সংরক্ষিত।)

-আই পতাকা ঘোষণা করে যে স্ট্রিংটি spawn_id নামক স্থানে পাঠানো হবে। Spawn_id যদি user_spawn_id হয় , এবং টার্মিনাল কাঁচা মোডে থাকে, স্ট্রিংতে নতুন লাইনগুলি নতুন-নতুন স্লাইডে রূপান্তরিত হয় যাতে তারা প্রদর্শিত হয় যেন টার্মিনাল রান্না করা অবস্থায় থাকে। এই পতাকাটি এই অনুবাদকে অক্ষম করে।

- নল ফ্ল্যাবল নকল অক্ষর (0 বাইট) পাঠায়। ডিফল্টরূপে, একটি নাল পাঠানো হয়। একটি পূর্ণসংখ্যা- অনুলিপিটি অনুসরণ করতে পারে যাতে বোঝা যায় কত সংখ্যক নাল পাঠাতে হয়।

-ভাবা পতাকা একটি বিরতি শর্ত উত্পন্ন করে। স্পন আইডিটি "স্পন -পেন" এর মাধ্যমে খোলা একটি টিটি ডিভাইস বোঝায় যদি এটি কেবলই বুঝতে পারে। আপনি যদি টিপ হিসাবে একটি প্রক্রিয়া উত্পন্ন করেছেন, আপনি একটি বিরতি তৈরি করার জন্য টিপ এর কনভেনশন ব্যবহার করা উচিত

-এর পতাকা বাহিনীকে "ধীরে ধীরে" পাঠাতে হবে, এইভাবে সাধারণ পরিস্থিতি এড়িয়ে চলুন যেখানে একটি কম্পিউটারের আউটপুট একটি ইনপুট বাফার যা মানুষের জন্য ডিজাইন করা হয়েছিল যে একই বুফারটি কখনো প্রবাহিত হবে না। এই আউটপুট ভেরিয়েবল "send_slow" এর মান দ্বারা নিয়ন্ত্রিত হয় যা একটি দুটি উপাদান তালিকার ধারণ করে। প্রথম উপাদানটি একটি পূর্ণসংখ্যা যা পরমাণুভাবে পাঠাতে বাইটের সংখ্যাটি বর্ণনা করে। দ্বিতীয় উপাদান হল একটি বাস্তব সংখ্যা যা পারমাণবিক প্রেরণ করে সেকেন্ডের সংখ্যাটি আলাদা করা উচিত। উদাহরণস্বরূপ, "send send_slow {10.001}" সেট করুন "পাঠান-গুলি" চাপুন যাতে প্রতিটি 10 ​​অক্ষরের মধ্যে 1 মিলিসেকেন্ডের সাহায্যে স্ট্রিংগুলি প্রেরণ করা হয়।

-এই ফ্ল্যাশ বাহিনী আউটপুট প্রেরণ করা (কিছুটা) একটি মানুষের আসলে টাইপিং মত। মানুষের অনুরূপ বিলম্ব অক্ষর মধ্যে প্রদর্শিত। (অ্যালগরিদমটি ওয়েবিয়ান ডিস্ট্রিবিউশনের উপর ভিত্তি করে তৈরি করা হয়েছে, এই বিশেষ প্রয়োগ অনুসারে পরিবর্তনগুলি।) এই আউটপুটটিকে "send_human" ভেরিয়েবলের মান দ্বারা নিয়ন্ত্রিত হয় যা একটি পাঁচটি উপাদান তালিকায় থাকে। প্রথম দুটি উপাদান সেকেন্ডের মধ্যে অক্ষরের গড় interwarrival সময়। প্রথমটি ডিফল্ট হিসাবে ব্যবহার করা হয়। দ্বিতীয় শব্দটি শব্দ শেষ সময়ে ব্যবহার করা হয়, এই ধরনের সংক্রমণে মাঝে মাঝে ঘটে এমন সূক্ষ্ম পজিশনগুলিকে অনুকরণ করার জন্য। তৃতীয় প্যারামিটার একটি পরিমাপযোগ্যতার পরিমাপ যেখানে .1 খুবই পরিবর্তনশীল, 1 যুক্তিসঙ্গত পরিবর্তনশীল, এবং 10 বেশ অব্যাহত। চূড়ান্ত হয় 0 অস্তিত্বের জন্য। শেষ দুটি পরামিতি, যথাক্রমে, একটি সর্বনিম্ন এবং সর্বোচ্চ অন্তর্বর্তী সময়। সর্বনিম্ন এবং সর্বাধিক শেষ ব্যবহার করা হয় এবং চূড়ান্ত সময় "ক্লিপ"। ন্যূনতম এবং সর্বোচ্চ ক্লিপ যথেষ্ট মান যদি শেষ গড় প্রদত্ত গড় থেকে বেশ ভিন্ন হতে পারে।

একটি উদাহরণ হিসাবে, নিম্নলিখিত কমান্ড একটি দ্রুত এবং সামঞ্জস্যপূর্ণ typist emulates:

send_human সেট করুন .1.13 .05 2} পাঠান- "আমি ক্ষুধার্ত, লাঞ্চ করি।"

যখন একটি হ্যান্ডোভার পরে নিম্নলিখিত আরও উপযুক্ত হতে পারে:

send_human সেট করুন .4 .4 .2 .5 100} send -h "Goodd party lash night!"

লক্ষ্য করুন যে ত্রুটিগুলি সিমুলেশন নয়, যদিও আপনি একটি ত্রুটি সংশোধন শর্তগুলি সেট আপ করতে পারেন এবং একটি প্রেরণ আর্গুমেন্ট ভুল সংশোধন করে।

নুল অক্ষর পাঠাতে পতাকাগুলি পাঠানোর জন্য, বিরতি প্রেরণ করার জন্য এবং ধনাত্মক আউটপুটকে বাধ্য করার জন্য পতাকাগুলি পারস্পরিকভাবে একচেটিয়া। শুধুমাত্র শেষ নির্দিষ্ট একটি ব্যবহৃত হবে। উপরন্তু, কোন স্ট্রিং যুক্তি নাল অক্ষর বা বিরতি পাঠাতে পতাকা সঙ্গে নির্দিষ্ট করা যাবে।

এটি একটি প্রত্যাশার দ্বারা একটি প্রক্রিয়া প্রথম পাঠানোর পূর্বে একটি ভাল ধারণা। প্রত্যাশার প্রক্রিয়া শুরু করার জন্য অপেক্ষা করবে, যখন প্রেরণ করা যাবে না। বিশেষ করে, যদি প্রথম পাঠানোর প্রক্রিয়া প্রক্রিয়াটি শুরু হওয়ার আগে সম্পন্ন হয়, তবে আপনার ডেটা উপেক্ষা করার ঝুঁকিটি আপনি চালাচ্ছেন। এমন পরিস্থিতিতে যেখানে ইন্টারেক্টিভ প্রোগ্রাম কোন প্রারম্ভিক প্রম্পট প্রদান করে না, আপনি একটি বিলম্ব হিসাবে প্রেরণ করতে পারেন যেমন:

# হ্যাকারকে কিভাবে বিরতি দেওয়া যায় তা ইঙ্গিত দিতে, # এই সিস্টেমটি একটি বাহ্যিক পাসওয়ার্ডের জন্য প্রম্পট করে না। # 5 সেকেন্ডের জন্য স্প্যান টেলনেটকে সম্পূর্ণ করার জন্য অপেক্ষা করুন .secure.gov ঘুম 5 পাসওয়ার্ড পাঠান \ r

exp_send পাঠানোর জন্য একটি উপনাম যদি আপনি বিনিয়োগকারী হিসাবে প্রত্যাশিত Expectk বা অন্য কিছু রূপ ব্যবহার করছেন, প্রেরণ একটি সম্পূর্ণরূপে ভিন্ন উদ্দেশ্যে টাকা দ্বারা সংজ্ঞায়িত করা হয়। exp_send পরিবেশের মধ্যে সামঞ্জস্যের জন্য উপলব্ধ করা হয়। অন্য Expect এর অন্যান্য পাঠানোর কমান্ডের জন্য অনুরূপ aliases প্রদান করা হয়।

send_error [-flags] স্ট্রিং
পাঠানো মত, আউটপুট বর্তমান প্রক্রিয়ার পরিবর্তে stderr পাঠানো হয় ছাড়াও।

send_log [-] স্ট্রিং
যেমন পাঠানো হয় , তেমনি স্ট্রিং শুধুমাত্র লগ ফাইলে প্রেরিত হয় ( log_file দেখুন ।) কোনও লগ ফাইল খোলা থাকলে আর্গুমেন্টগুলি উপেক্ষা করা হয়।

send_tty [-flags] স্ট্রিং
পাঠানোর মতো, যেটি আউটপুট বর্তমান প্রসেসের পরিবর্তে / dev / tty- এ পাঠানো হয়।

send_user [-flags] স্ট্রিং
যেমন পাঠানো হয় , তেমনি আউটপুট বর্তমান প্রসেসের পরিবর্তে stdout এ পাঠানো হয়।

ঘুম সেকেন্ড
দেওয়া সংখ্যা সেকেন্ডের জন্য স্ক্রিপ্ট ঘুমায় । সেকেন্ড দশমিক সংখ্যা হতে পারে। বিঘ্ন (যদি আপনি Expectk ব্যবহার করছেন তাহলে ইভেন্টগুলি) প্রক্রিয়াকৃত হয় যখন ঘুমান আশা।

স্প্যান [আর্গস] প্রোগ্রাম [আরজি]
"প্রোগ্রাম আর্গুম" চালানোর একটি নতুন প্রক্রিয়া তৈরি করে। তার stdin, stdout এবং stderr প্রত্যাশার সাথে সংযোগ করা হয়, যাতে তারা অন্য Expect কমান্ডগুলি দ্বারা পড়া এবং লিখিত হতে পারে। সংযোগটি বন্ধ হয়ে গেছে অথবা যদি প্রক্রিয়াটি কোনও ফাইল শনাক্তকারীগুলিকে বন্ধ করে দেয়

স্পান দ্বারা একটি প্রক্রিয়া শুরু করা হয়, পরিবর্তনশীল spawn_id যে প্রক্রিয়া উল্লেখ একটি বর্ণনাকারী সেট করা হয়। Spawn_id দ্বারা বর্ণিত প্রক্রিয়াটিকে "বর্তমান প্রক্রিয়া " বলে মনে করা হয়। spawn_id কার্যকরী নিয়ন্ত্রণ প্রদান করে, পড়া বা লিখিত হতে পারে।

user_spawn_id একটি বৈশ্বিক ভেরিয়েবল যা একটি বর্ণনাকারী ধারণ করে যা ব্যবহারকারীকে বোঝায়। উদাহরণস্বরূপ, যখন spawn_id এই মান সেট করা হয়, আশা expector_user এর মত আচরণ করে।

আমি error_spawn_id হল একটি গ্লোবাল ভেরিয়েবল যা একটি বর্ণনাকারীকে দিয়ে থাকে যা স্ট্যান্ডার্ড ত্রুটিকে বোঝায়। উদাহরণস্বরূপ, যখন spawn_id এই মানটি নির্ধারিত হয়, send_error এর মত আচরণ প্রেরণ করুন

tty_spawn_id একটি বৈশ্বিক ভেরিয়েবল যা একটি বর্ণনাকারী রয়েছে যা / dev / tty উল্লেখ করে। যদি / dev / tty উপস্থিত না হয় (যেমন একটি ক্রোন, এ বা ব্যাচ স্ক্রিপ্ট), তাহলে tty_spawn_id সংজ্ঞায়িত করা হয় না। এই হিসাবে পরীক্ষা করা যেতে পারে:

যদি {{info vars tty_spawn_id}} {# / dev / tty exists} অন্যথায় {# / dev / tty বিদ্যমান হয় না # সম্ভবত ক্রোন, ব্যাচ বা স্ক্রিপ্টে)

অজানা UNIX প্রক্রিয়া আইডি ফেরৎ যদি কোনও প্রক্রিয়া উত্পন্ন হয়, 0 ফিরে আসে পরিবর্তনশীল spawn_out (ক্রীতদাস, নাম) পিটি স্লেভ ডিভাইসের নামে সেট করা হয়।

ডিফল্টভাবে, spawn কমান্ডের নাম এবং আর্গুমেন্টগুলি প্রতিধ্বনিত করে। এনওইইইইইউ-এর পতাকা এইটি থেকে বমি করা বন্ধ করে দেয়

-কোনসোল ফ্লাগটি উত্পন্ন প্রক্রিয়ার পুনঃনির্দেশিত হওয়ার জন্য কনসোলের আউটপুটকে কারণ করে । এটি সমস্ত সিস্টেমে সমর্থিত নয়।

অভ্যন্তরীণভাবে, spawn একটি pty ব্যবহার করে, ব্যবহারকারীর tty হিসাবে একই ভাবে ইনিশিয়ালাইজ করা। এটি আরও ইনিশিয়ালাইজ করা হয় যাতে সমস্ত সেটিংস "সাণী" (স্টটি (1) অনুযায়ী)। যদি পরিবর্তনশীল stty_init সংজ্ঞায়িত করা হয়, এটি স্টিকি আর্গুমেন্টের শৈলীতে আরও কনফিগারেশন হিসাবে ব্যাখ্যা করা হয়েছে উদাহরণস্বরূপ, "stty_init raw সেট করুন" কাঁচা মোডে চালু হওয়ার জন্য আরও উত্পন্ন প্রসেসের টার্মিনালের সৃষ্টি করবে। নোটসিকপি ব্যবহারকারীর tty এর উপর ভিত্তি করে প্রারম্ভিকতা বাদ দেয়। -নাটটিইনটি " সাণ " ইনিশিয়ালাইজেশনকে ছাড়িয়ে যায়।

সাধারনত, ডিমটি চালানোর জন্য সামান্য সময় লাগে। যদি আপনি একটি উল্লেখযোগ্য পরিমাণ সময় spawn গ্রহণ লক্ষ্য, এটা সম্ভবত ptys যে wedged সম্মুখীন হয়। ত্রুটিপূর্ণ প্রসেসগুলির সাথে সংযোগ বিচ্ছিন্নতা এড়ানোর জন্য অনেকগুলি পরীক্ষা পিটিএসএস-এ চালানো হয়। (এই 10 সেকেন্ড প্রতি wedged pty নিতে।) -d বিকল্প আশা করে রান করা দেখায় যদি অদ্ভুত রাজ্যের অনেক ptys সম্মুখীন হয়। যদি আপনি প্রসেসগুলির যে এই ptys সংযুক্ত করা হয় না হত্যা করতে পারেন, আপনার শুধুমাত্র আশ্রয় রিবুট করা হতে পারে।

যদি প্রোগ্রামটি সফলভাবে বানানো না হয় তবে exec (2) ব্যর্থ হলে (উদাহরণস্বরূপ যখন প্রোগ্রামটি অস্তিত্ব নেই), একটি পরবর্তী পরবর্তী ইন্টারঅ্যাক্ট বা ত্রুটির বার্তাটি প্রত্যাশিত হবে যাতে কমান্ডের মত প্রোগ্রামটি চালানো এবং আউটপুট হিসাবে ত্রুটি বার্তাটি উত্পন্ন করে। এই আচরণ স্পন এর বাস্তবায়ন একটি প্রাকৃতিক পরিণতি হয়। অভ্যন্তরীণভাবে, ফোবাল ফোস্কা, যার পরে spawn_id এর মাধ্যমে যোগাযোগ ব্যতীত উত্পন্ন প্রক্রিয়াটি মূল অভ্যাসের সাথে যোগাযোগের কোন উপায় নেই।

-পেন ফ্ল্যাগটি পরের যুক্তিকে একটি Tcl ফাইল শনাক্তকারী (যেমন, খোলা দ্বারা ফেরত দেওয়া হয়) হিসাবে ব্যাখ্যা করা হয়। স্পন আইডি তখন ব্যবহার করা যেতে পারে যেমন এটি একটি অজানা প্রক্রিয়া । (ফাইল সনাক্তকারীটি আর ব্যবহার করা উচিত নয়।) এটি আপনাকে pty ব্যবহার না করে কপাটক ডিভাইস, ফাইল এবং পাইপলাইনগুলিকে স্প্যামযুক্ত প্রসেস হিসাবে ব্যবহার করতে দেয়। 0 কোনও সম্পর্কিত প্রক্রিয়া নেই তা নির্দেশ করতে ফিরে এসেছে। যখন উত্পন্ন প্রক্রিয়াটি বন্ধ করা হয় তখন Tcl ফাইল শনাক্তকারী হয়। লেভোওপেন ফ্ল্যাড-এর মত একই রকম- স্পর্শ id বন্ধ হওয়ার পরেও -লিভোপেন ফাইল আইডেন্টিফাইজারকে খোলা রাখতে বাধ্য করে।

খালি পতাকা খোলার জন্য একটি pty কারণ কিন্তু কোনও প্রক্রিয়া উত্পন্ন হয়। 0 কোনও সম্পর্কিত প্রক্রিয়া নেই তা নির্দেশ করতে ফিরে এসেছে। Spawn_id সর্বদা হিসাবে সেট করা হয়।

পরিবর্তনশীল spawn_out (স্লেভ, fd) pty slave এর অনুরূপ একটি ফাইল সনাক্তকারীতে সেট করা হয়। এটি "বন্ধ-স্লেভ" ব্যবহার করে বন্ধ করা যেতে পারে

দ্য -গনার পতাকা নামক একটি সংকেতকে অজানা প্রক্রিয়াতে উপেক্ষা করা হয়। অন্যথায়, সংকেত ডিফল্ট আচরণ পেতে। সিগন্যালগুলিকে ফাঁদ কমান্ডের নামে নামকরণ করা হয়েছে, ব্যতীত প্রতিটি সংকেত একটি পৃথক পতাকা প্রয়োজন।

স্ট্রেচ লেভেল
মৃত্যুদণ্ড কার্যকর হওয়ার পূর্বে নিম্নলিখিত বিবৃতিগুলি মুদ্রণ করা হবে। (Tcl এর ট্রেস কমান্ডের ভেরিয়েবল ট্রেস।) স্তরটি ইঙ্গিত করে যে কল স্ট্যাকের ট্রেইনে কতদূর নিচে। উদাহরণস্বরূপ, নিম্নোক্ত কমান্ডটি প্রথম 4 স্তরের কলগুলির ট্রেস করার সময় অপেক্ষাকৃত রান করে, কিন্তু তার নীচের কোনটি নীচে নেই।

আশা -c "স্ট্রেইস 4" স্ক্রিপ্ট.exp

-আইএফও ফ্ল্যাড স্টাডকে দেওয়া সবচেয়ে সাম্প্রতিক অ-তথ্য আর্গুমেন্টের বর্ণনাটি ফেরত দেয়।

stty args
বাহ্যিক স্টিক কমান্ডের অনুরূপ টার্মিনাল মোড পরিবর্তন করে।

ডিফল্টরূপে, কন্ট্রোলিং টার্মিনাল অ্যাক্সেস করা হয়। অন্যান্য টার্মিনালগুলি যুক্ত করে "অ্যাক্সেসের জন্য অনুরোধের জন্য অনুরোধের মাধ্যমে অ্যাক্সেস করা যায়" কমান্ডের ফলাফল হিসাবে এটি প্রত্যাবর্তন করা হয়। যদি কোনও স্থিতি অনুরোধ করা হয় না এবং কন্ট্রোলিং টার্মিনাল অ্যাক্সেস করা হয়, তবে কাঁচা এবং প্রতিধ্বনিতুল্য বৈশিষ্ট্যগুলির পূর্ববর্তী অবস্থা এমন ফর্মের মধ্যে ফেরত পাওয়া যায় যা পরবর্তীতে হতে পারে কমান্ড দ্বারা ব্যবহৃত।

উদাহরণস্বরূপ, কাঁচা অথবা কুপিত আর্গুমেন্টগুলি টার্মিনালকে কাঁচা মোডে রাখুন। আর্গুমেন্ট- আপ বা রান্না করা রান্না করা মোড টার্মিনালে রাখুন। আর্গুমেন্ট echo এবং -echo টার্মিনালে echo এবং noecho মোড যথাক্রমে রাখুন

নিম্নোক্ত উদাহরণটি ইঙ্গিত করে যে ইকোয়িং অস্থায়ীভাবে অক্ষম করুন। এইগুলি তাদের মধ্যে এম্বেড করা পাসওয়ার্ডগুলি এড়াতে অন্যান্য-স্বয়ংক্রিয় স্ক্রিপ্টগুলিতে ব্যবহার করা যেতে পারে। (নীচের অনুমানের নীচে এই বিষয়ে আরো আলোচনা দেখুন।)

stty -echo send_user "পাসওয়ার্ড:" expect_user -re "(। *) \ n" পাসওয়ার্ড সেট করুন $ expect_out (1, স্ট্রিং) স্টিকি ইকো

সিস্টেম আর্গুমেন্ট
এগুলিকে sh (1) হিসাবে ইনপুট হিসাবে প্রদান করে, যেমনটি টার্মিনাল থেকে কমান্ড হিসাবে টাইপ করা হয়েছে। শেল সমাপ্ত না হওয়া পর্যন্ত অপেক্ষা প্রত্যাশা । Sh থেকে রিটার্ন স্ট্যাটাস একই পদ্ধতিতে পরিচালিত হয় যা exec তার রিটার্ন স্ট্যাটাস পরিচালনা করে।

Exec এর বিপরীতে যা stdin এবং stdout স্ক্রিপ্টে পুনঃনির্দেশিত করে, সিস্টেম কোন রেডক্রিপশন (স্ট্রিং নিজেই নির্দেশিত অন্য যেকোনো) সঞ্চালন করে না। এইভাবে, যেগুলি সরাসরি / dev / tty তে সরাসরি আলোচনা করা উচিত প্রোগ্রামগুলি ব্যবহার করা সম্ভব। একই কারণে, সিস্টেমের ফলাফল লগ এ রেকর্ড করা হয় না।

টাইমস্ট্যাম্প [আরজি]
একটি টাইমস্ট্যাম্প ফেরত কোন আর্গুমেন্ট সঙ্গে, যুগ ফিরে আসার পর থেকে সেকেন্ডের সংখ্যা।

ফরম্যাটের পতাকাটি এমন একটি স্ট্রিং প্রদান করে যা ফেরত দেওয়া হয় কিন্তু পিস্তলগুলির জন্য পিওএসআইএস নিয়ম অনুযায়ী প্রতিস্থাপিত হয়। উদাহরণস্বরূপ% a একটি সংক্ষিপ্ত সপ্তাহের নাম (অর্থাৎ, শাটার) দ্বারা প্রতিস্থাপিত হয়। অন্যদের হয়:

% একটি সংক্ষিপ্ত সপ্তাহের দিন% একটি পূর্ণ সপ্তাহের দিন নাম% b সংক্ষিপ্ত সংখ্যা নাম% B পুরো মাস নাম% সি তারিখের সময়: Wed অক্টোবর 6 11:45:56 1993% দিনের d দিনের (01-31% ঘন্টা ঘন্টা (00-23)% আমি ঘন্টা (01-12)% জুন দিন (001-366)% মি মাস (01-12)% মি মিনিট (00-59)% পি বা বিক্রি% এস সেকেন্ড (00-61) % u দিন (1-7, সোমবার সপ্তাহের প্রথম দিন)% ইউ সপ্তাহ (00-53, প্রথম রবিবার সপ্তাহ এক দিনের প্রথম)% V সপ্তাহ (01-53, ISO 8601 শৈলী)% w দিন (0- 6)% সপ্তাহ (00-53, প্রথম সোমবার এক সপ্তাহের প্রথম দিন)% x তারিখের সময়: Wed অক্টোবর 6 1993% এক্স সময়: 23:59:59% y বছর (00-99) % Y বছরের মধ্যে: 1993% Z টাইমজোন (বা নির্ধারণযোগ্য না হলে কিছুই) %% একটি বেয়ার শতাংশ চিহ্ন

অন্যান্য% স্পেসিফিকেশন অনির্ধারিত হয়। অন্যান্য অক্ষর অক্ষরযুক্ত মাধ্যমে পাস করা হবে শুধুমাত্র সি লোকেল সমর্থিত।

এই সিক্রেড ফ্ল্যাগটি কয়েক সেকেন্ডের সন্নিবেশিত করে, যেহেতু এপোচটি একটি উত্স হিসাবে ব্যবহার করা হয় যা থেকে বিন্যাস করতে হয়। অন্যথায়, বর্তমান সময় ব্যবহৃত হয়।

জিএমটি ফ্ল্যাশ জিএমটি টাইমজোন ব্যবহার করার জন্য টাইমস্ট্যাম্প আউটপুট ব্যবহার করে। কোন পতাকা ছাড়াই, স্থানীয় টাইমজোন ব্যবহার করা হয়।

ফাঁদ [[কমান্ড] সংকেত]
প্রদত্ত কমান্ডটি প্রদত্ত সংকেতগুলির ভবিষ্যতের প্রাপ্তির উপর পরিচালিত হওয়ার কারণটি এই কমান্ডটি বিশ্বব্যাপী সুযোগে চালানো হয়। যদি কমান্ডটি অনুপস্থিত থাকে, তবে সংকেত ব্যবস্থাটি ফেরত দেওয়া হয়। কমান্ডটি যদি SIG_IGN স্ট্রিং হয় তবে সংকেতগুলিকে উপেক্ষা করা হয়। কমান্ডটি যদি SIG_DFL স্ট্রিং হয় তবে সিগন্যালগুলি সিস্টেমের ডিফল্ট রূপে দেখা যায়। সংকেত হয় একটি সংকেত বা সংকেত একটি তালিকা। সংকেত সংকেত অনুযায়ী (3) সাংখ্যিক বা সাংখ্যিকভাবে নির্দিষ্ট করা যেতে পারে। "SIG" উপসর্গ বাদ দেওয়া হতে পারে।

কোন আর্গুমেন্ট (বা আর্গুমেন্ট-সংখ্যা) ছাড়াই, ফাঁদ ফাঁকা কমান্ডের সংকেত সংখ্যার বর্তমান কর্ম সঞ্চালন করা হয়।

কোডটি যেকোনো কোড Tcl এর পরিবর্তে কমান্ডের রিটার্ন কোড ব্যবহার করে, যখন কমান্ডটি মূলত চলমান অবস্থায় ফিরে আসে।

ফাঁদটি ঘোষিত হওয়ার পরিবর্তে কমান্ডটি চালানোর সময় কমান্ডটি ইন্টারপ্রেটার ব্যবহার করে মূল্যায়ন করার কমান্ডটি ব্যবহার করে।

-name ফ্ল্যাশ স্প্ল্যাং কমান্ডটি এখন এক্সিকিউট করা হচ্ছে ফাঁদ কমান্ডের সংকেত নামটি ফেরত দেয়।

-এমএক্স ফ্ল্যাগটি সেট করার জন্য সর্বাধিক সংকেত নম্বরটি ফেরত করার জন্য trap কমান্ডটি ব্যবহার করে।

উদাহরণস্বরূপ, কমান্ড "ফাঁদ {send_user" Ouch! "} SIGINT" মুদ্রণ হবে "আউচ!" প্রতিটি সময় ব্যবহারকারী presses ^ সি।

ডিফল্টরূপে, SIGINT (যা সাধারণত C চাপার দ্বারা উত্পন্ন করা হয়) এবং SIGTERM প্রস্থান করার প্রত্যাশা কারণ। এই নিম্নলিখিত ফাঁদ কারণে, ডিফল্ট দ্বারা তৈরি যখন প্রত্যাশা আরম্ভ।

ফাঁদ প্রস্থান {SIGINT SIGTERM}

ডিবাগার আরম্ভ করার জন্য আপনি-ডি পতাকা ব্যবহার করলে, ইন্টারনাল ডিবাগার শুরু করতে SIGINT পুনরায় নির্ধারণ করা হয়। এই নিম্নলিখিত ফাঁদ কারণে:

ফাঁদ {exp_debug 1} SIGINT

ডিবাবগার ফাঁদ পরিবর্তন করা যায় পরিবেশগত পরিবর্তনশীল EXPECT_DEBUG_INIT সেটিকে নতুন ট্রাপ কমান্ডে রূপান্তর করে।

আপনি, অবশ্যই, এই উভয় ধাপে আপনার স্ক্রিপ্ট থেকে ফাঁদ কমান্ড যোগ করতে পারেন। বিশেষ করে, যদি আপনার নিজস্ব "ফাঁদ প্রস্থান SIGINT" থাকে, এটি ডিবাগার ফাঁদকে অগ্রাহ্য করবে। এটি দরকারী যদি আপনি ডিবাগার থেকে ব্যবহারকারীদের সব থেকে বিরত রাখতে চান।

আপনি যদি SIGINT এ আপনার নিজের ফাঁদকে সংজ্ঞায়িত করতে চান কিন্তু এটি চলমান অবস্থায় ডিবাগারে ফাঁদ পেতে তবে ব্যবহার করুন:

যদি {! [exp_debug]} {trap mystuff SIGINT}

অন্যথায়, আপনি অন্য কোন সংকেত ব্যবহার করে ডিবাগারে ফাঁদ পেতে পারেন।

ফাঁদ SIGALRM জন্য কর্মের উপর ওভাররাইড করতে দিবে না কারণ এটি প্রত্যাশিতভাবে অভ্যন্তরীণভাবে ব্যবহার করা হয়। ডিস্কনেট কমান্ডটি SIGALRM SIG_IGN (উপেক্ষা করুন) এ স্থাপন করে। আপনি যতদিন এটি পরবর্তী spawn কমান্ডের সময় এটি অক্ষম হিসাবে এটি reenable করতে পারেন।

আরও তথ্যের জন্য সংকেত দেখুন (3)

অপেক্ষা করুন [আর্গুমেন্ট]
বিলুপ্ত হওয়া পর্যন্ত একটি অজানা প্রক্রিয়া (বা বর্তমান প্রক্রিয়া যদি কেউ না থাকে) শেষ হয়ে যায়।

স্বাভাবিকভাবেই চারটি পূর্ণসংখ্যার একটি তালিকা ফেরত অপেক্ষা করুন প্রথম পূর্ণসংখ্যার প্রক্রিয়াটির পিড হল যা অপেক্ষা করা হয়েছিল। দ্বিতীয় পূর্ণসংখ্যা হল সংশ্লিষ্ট স্পন আইডি। তৃতীয় পূর্ণসংখ্যা -1 যদি একটি অপারেটিং সিস্টেম ত্রুটি ঘটে, অথবা অন্যথায় 0। যদি তৃতীয় পূর্ণসংখ্যা ছিল 0, চতুর্থটি পূর্ণসংখ্যা হল স্পানড প্রসেস দ্বারা ফিরে আসা অবস্থা। তৃতীয় পূর্ণসংখ্যা -1 হলে, চতুর্থ ইন্টিজারটি অপারেটিং সিস্টেম দ্বারা নির্ধারিত errno এর মান। গ্লোবাল ভেরিয়েবল ErrorCode এছাড়াও সেট করা হয়।

অপেক্ষা থেকে রিটার্ন মান শেষে অতিরিক্ত উপাদানগুলি প্রদর্শিত হতে পারে একটি ঐচ্ছিক পঞ্চম উপাদান তথ্য একটি শ্রেণী চিহ্নিত। বর্তমানে, এই উপাদানটির জন্য কেবলমাত্র সম্ভাব্য মূল্য হল চাইল্ড্কিল্ড যেখানে পরবর্তী দুটি মান সি-স্টাইলের সিগন্যাল নাম এবং একটি ছোট পাঠ্য বিবরণ।

-আই পতাকা ঘোষিত spawn_id ( প্রক্রিয়া আইডি না) এর অনুরূপ অপেক্ষা প্রক্রিয়া ঘোষণা করে। একটি SIGCHLD হ্যান্ডলারের ভিতর, spawn id-1 ব্যবহার করে কোনও অজানা প্রক্রিয়াটির জন্য অপেক্ষা করা সম্ভব।

-পরিবর্তন পত্রে একটি সফল অপেক্ষা ইঙ্গিত সঙ্গে অবিলম্বে ফিরে প্রত্যাশা কারণ। যখন প্রক্রিয়াটি (পরে) প্রস্থান করে, এটি স্বয়ংক্রিয়ভাবে একটি স্পষ্ট প্রতীক্ষা প্রয়োজন ছাড়া অদৃশ্য হয়ে যাবে।

অপেক্ষা কমান্ডটি ব্যবহার করা যেতে পারে "-i -1" আর্গুমেন্ট ব্যবহার করে একটি forked প্রক্রিয়াটির জন্য অপেক্ষা ফাঁকা প্রক্রিয়ায় তার ব্যবহারের বিপরীতে, এই কমান্ডটি যে কোনো সময়ে সঞ্চালিত হতে পারে। কোন প্রক্রিয়া কোন ফসল কাটা হয় উপর কোন নিয়ন্ত্রণ নেই। যাইহোক, রিটার্ন মান চেক করতে পারেন প্রক্রিয়া আইডি জন্য

লাইব্রেরি

প্রত্যাশা স্ক্রিপ্ট জন্য দুটি বিল্ট-ইন লাইব্রেরি সম্পর্কে স্বয়ংক্রিয়ভাবে জানে। এই ভেরিয়েবল exp_library এবং exp_exec_library এ নামকরা ডিরেক্টরি দ্বারা সংজ্ঞায়িত করা হয়। উভয়ই ইউটিলিটি ফাইল ধারণ করে থাকে যা অন্যান্য স্ক্রিপ্টের মাধ্যমে ব্যবহার করা যায়।

exp_library- র স্থাপত্য-স্বাধীন ফাইল রয়েছে। exp_exec_library- এ আর্কিটেকচার-নির্ভর ফাইলগুলি রয়েছে। আপনার সিস্টেমের উপর ভিত্তি করে, উভয় ডিরেক্টরি সম্পূর্ণ খালি হতে পারে। $ Exp_exec_library / cat-buffers ফাইলটির অস্তিত্ব বর্ণনা করে যে ডিফল্টরূপে আপনার / bin / cat বাফার।

প্রিটি-প্রিন্টিং

একটি vgrind সংজ্ঞা প্রশংসনীয় মুদ্রণ প্রত্যাশা স্ক্রিপ্ট জন্য উপলব্ধ। প্রত্যাশিত বন্টনের সাথে সরবরাহকৃত vgrind সংজ্ঞা সঠিকভাবে ইনস্টল করা অনুমান করে, আপনি এটি ব্যবহার করতে পারেন:

vgrind -lexpect ফাইল

উদাহরণ

এটি অনেকগুলি প্রকাশ করা যায় না যে কীভাবে সবকিছু একত্রে রাখা যায় যেটি ম্যান পৃষ্ঠাটি বর্ণনা করে। আমি আপনাকে প্রত্যাশা ডিস্ট্রিবিউশন উদাহরণ ডিরেক্টরী পড়তে এবং উদাহরণ চেষ্টা চেষ্টা। তাদের কিছু বাস্তব প্রোগ্রাম হয়। অন্যদের নির্দিষ্ট কৌশল শুধু দৃষ্টান্তমূলক, এবং অবশ্যই, একটি দম্পতি শুধু দ্রুত হ্যাক হয়। ইন্সটল ফাইল এই প্রোগ্রামগুলির একটি দ্রুত ওভারভিউ আছে।

প্রত্যাশিত কাগজপত্র (দেখুন এই দেখুন )ও দরকারী। কিছু কাগজপত্র প্রত্যাশিত পূর্ববর্তী সংস্করণের অনুরূপ সিনট্যাক্স ব্যবহার করে, সেই সাথে যুক্ত রায়গুলি এখনও বৈধ এবং এই ম্যান পৃষ্ঠাটির চেয়ে অনেক বেশি বিশদ বিশ্লেষণে যায়।

আদেশ সহকারে

এক্সটেনশানগুলি প্রত্যাশা এর কমান্ডের নামগুলি দ্বারা সংঘর্ষ হতে পারে উদাহরণস্বরূপ, পাঠান একটি সম্পূর্ণরূপে ভিন্ন উদ্দেশ্যে টাকা দ্বারা সংজ্ঞায়িত করা হয়। এই কারণে, অধিকাংশ Expect কমান্ডগুলি "exp_XXXX" হিসাবেও উপলব্ধ। "এক্সপো", "ইন্টার", "স্পান" এবং "টাইমআউট" এর সাথে শুরু হওয়া কমান্ড এবং ভেরিয়েবলগুলি উপনামগুলি নেই। পরিবেশের মধ্যে এই সামঞ্জস্যের প্রয়োজন হলে বর্ধিত কমান্ডের নাম ব্যবহার করুন।

আশা করা যায় যে স্কোপিংয়ের একটি উদার দৃষ্টিভঙ্গি রয়েছে। বিশেষত, প্রত্যাশিত প্রোগ্রামের নির্দিষ্ট কমান্ডগুলি দ্বারা ভেরিয়েবলগুলি স্থানীয় সুযোগ থেকে প্রথম চাওয়া হবে, এবং যদি পাওয়া যায় না, তবে বিশ্বব্যাপী সুযোগের মধ্যে। উদাহরণস্বরূপ, আপনি যে পদ্ধতি ব্যবহার করেন সেগুলি ব্যবহার করে "গ্লোবাল টাইমআউট" স্থাপন করার প্রয়োজনটি প্রত্যাহার করে নেয় অন্যদিকে, লেখা ভেরিয়েবল সর্বদা স্থানীয় সুযোগ (যদি না "গ্লোবাল" কমান্ড জারি করা হয়) থাকে। সবচেয়ে সাধারণ সমস্যা এই কারণ হয় যখন spawn একটি পদ্ধতিতে মৃত্যুদন্ড কার্যকর করা হয়। প্রসেসের বাইরে, spawn_id আর বিদ্যমান নেই, তাই স্পপিং পদ্ধতির কারণে স্প্যামযুক্ত প্রক্রিয়া আর অ্যাক্সেসযোগ্য নয়। এই ধরনের একটি পদ্ধতিতে একটি "গ্লোবাল spawn_id" যোগ করুন।

আপনি যদি মাল্টিপয়েন্টের সাপ্লিমেন্ট সক্ষম না করেন (অর্থাৎ, আপনার সিস্টেমটি কোনও নির্বাচন (BSD *। *), পোল (SVR> 2), অথবা কিছু সমতুল্য সমর্থন করে না) আশা করি শুধুমাত্র এক সময়ে একক প্রক্রিয়া নিয়ন্ত্রণ করতে সক্ষম হবে। এই ক্ষেত্রে, spawn_id সেট করার চেষ্টা করবেন না, এবং কোনও কার্যকর প্রক্রিয়া চলাকালীন exec ব্যবহার করে প্রসেসগুলি চালনা করা উচিত নয়। উপরন্তু, আপনি একই সময়ে একাধিক প্রসেস ( একসাথে ব্যবহারকারী সহ) থেকে আশা করতে পারবেন না।

টার্মিনাল প্যারামিটারগুলি স্ক্রিপ্টের উপর বড় প্রভাব ফেলতে পারে। উদাহরণস্বরূপ, যদি একটি স্ক্রিপ্টটি প্রতিধ্বনিত করার জন্য লেখা হয়, তবে ইকোয়িং চালু থাকলে তা অপব্যবহার করবে। এই কারণে, ডিফল্টভাবে বাহিনী টার্মিনাল প্যারামিটার বোঝা। দুর্ভাগ্যবশত, এটি অন্য প্রোগ্রামের জন্য অপ্রীতিকর জিনিস করতে পারে। উদাহরণস্বরূপ, emacs শেলটি "স্বাভাবিক" ম্যাপিংগুলি পরিবর্তন করতে চায়: নতুন লাইনগুলি ক্যারেজ-রিটার্ন নিউলাইনগুলির পরিবর্তে নতুন লাইনগুলির সাথে ম্যাপ করা হয় এবং প্রতিধ্বনি অক্ষম থাকে। এটি একটি ইনপুট লাইন সম্পাদনা করতে emacs ব্যবহার করতে পারবেন। দুর্ভাগ্যবশত, আশা করা সম্ভবত এই অনুমান করতে পারবেন না।

আপনি অনুরোধ করতে পারেন যে টার্মিনাল প্যারামিটারগুলির ডিফল্ট সেটিংকে ওভাররাইড করবেন না, তবে এই পরিবেশের জন্য স্ক্রিপ্ট লেখার সময় আপনাকে অবশ্যই খুব সতর্কতা অবলম্বন করতে হবে। এমএক্স এর ক্ষেত্রে, ইকোয়িং এবং লাইন-ম্যাপিংগুলির শেষের মত বিষয়গুলির উপর নির্ভর করে এড়ানো।

যে নির্দেশগুলি গ্রহণ করা হয়েছিল তা একক তালিকা ( প্রত্যাশিত রূপগুলি এবং মিথস্ক্রিয়া ) দ্বারা আবদ্ধ করা হয়েছে, যাতে তালিকাটি প্রকৃতপক্ষে একটি যুক্তি বা অনেকেই নির্ধারণ করতে পারে। অনুসন্ধানী ক্ষেত্রে শুধুমাত্র ব্যর্থ হতে পারে যখন তালিকাটি আসলে একটি একক যুক্তি উপস্থাপন করে যা একাধিক এম্বেড করা আছে \ n এর মধ্যে তাদের মধ্যে অ-হোয়াইট স্পেস অক্ষর আছে। এই যথেষ্ট অসম্ভব মনে হয়, তবে যুক্তিটি "-nobrace" ব্যবহার করা যেতে পারে একটি একক আর্গুমেন্টকে একক আর্গুমেন্ট হিসেবে পরিচালনা করতে বাধ্য করতে। এটি সম্ভবত মেশিন-তৈরি প্রত্যাশা কোডের সাথে ব্যবহার করা যেতে পারে। একইভাবে, -বিসেস একাধিক নিদর্শন / কর্ম হিসাবে হ্যান্ডেল হতে একটি একক যুক্তি বজায়

বাগ

এটা সত্যিই প্রোগ্রাম "লিঙ্গ" ("স্মার্ট EXEC" বা "প্রেরণ-প্রত্যাশিত") জন্য নাম প্রয়াস ছিল, কিন্তু ভাল অর্থে (বা সম্ভবত শুধু Puritanism) prevailed ছিল।

কিছু সিস্টেমে, যখন একটি শেল উত্পন্ন হয়, এটি tty অ্যাক্সেস করতে সক্ষম হচ্ছে না সম্পর্কে অভিযোগ কিন্তু যাইহোক রান। এর মানে আপনার সিস্টেমে কন্ট্রোলিং টিটি অর্জনের একটি পদ্ধতি আছে যা প্রত্যাশা সম্পর্কে জানতে পারে না। এটি কি তা খুঁজে বের করুন, এবং আমার কাছে এই তথ্য ফেরত পাঠান।

Ultrix 4.1 (কমপক্ষে এখানে সর্বশেষ সংস্করণ) 1000000 এর উপরে সময়সীমা বিবেচনা করে 0 এর সমতূল্য হতে পারে।

ডিজিটাল ইউনিক্স 4.0 এ (এবং সম্ভবত অন্যান্য সংস্করণগুলি) আপনি একটি SIGCHLD হ্যান্ডলার সংজ্ঞায়িত করলে ptys বরাদ্দ করতে অস্বীকার করেন। আরো তথ্যের জন্য অনুদান পাতা দেখুন।

IRIX 6.0 যথাযথভাবে PTY অনুমতিগুলি পরিচালনা করে না, যদি অন্য কোন ব্যক্তির দ্বারা পূর্বে ব্যবহৃত PTY বরাদ্দ করার প্রচেষ্টা প্রত্যাশা করা হয় তবে এটি ব্যর্থ হয়। IRIX 6.1 এ আপগ্রেড করুন

টেলনেট (SunOS 4.1.2 এর অধীনে যাচাই করা হয়েছে) যদি টার্মটি সেট না হয় তবে হ্যাং হয়। এটি ক্রোন এর অধীনে একটি সমস্যা, এ এবং সিগি স্ক্রিপ্টগুলিতে, যা TERM কে সংজ্ঞায়িত করে না সুতরাং, আপনি স্পষ্টভাবে সেট করা আবশ্যক - কি ধরণের সাধারণত অপ্রাসঙ্গিক হয়। এটা ঠিক কিছু সেট করা হয়েছে! বেশিরভাগ ক্ষেত্রে নিম্নলিখিত সম্ভবত যথেষ্ট।

সেট এনভি (টার্ম) vt100

টিপ (BSDI BSD / OS 3.1 i386 এর অধীনে যাচাই করা হয়েছে) যদি শেল এবং হোম সেট না থাকে তবে হ্যাং হয়। এই ক্রোন অধীনে একটি সমস্যা, এ এবং CGI স্ক্রিপ্ট মধ্যে, যা এই পরিবেশ ভেরিয়েবল সংজ্ঞায়িত না সুতরাং, আপনি তাদের স্পষ্টভাবে সেট করা আবশ্যক - কি ধরনের সাধারণত অপ্রাসঙ্গিক হয়। এটা ঠিক কিছু সেট করা হয়েছে! বেশিরভাগ ক্ষেত্রে নিম্নলিখিত সম্ভবত যথেষ্ট।

সেট এনভি (শেল) / বিন / শ সেট এনভ (হোম) / ইউসার / স্থানীয় / বিন

পিটিএস এর কিছু বাস্তবায়ন ডিজাইন করা হয়েছে যাতে কার্নেলটি কোনও অপঠিত আউটপুটকে 10 থেকে 15 সেকেন্ড পর (প্রকৃত সংখ্যা বাস্তবায়ন-নির্ভর) পরে প্রসেসটি ফাইল ডিস্কুলার বন্ধ করে দেয়। সুতরাং যেমন প্রোগ্রাম আশা

স্প্যান তারিখ ঘুম 20 আশা

অকৃতকার্য হবে. এটি এড়ানোর জন্য অ্যান্টি-ইন্টারেক্টিভ প্রোগ্রামগুলিকে এক্সপ্লের সাথে চালান না। যদিও এই ধরনের পরিস্থিতিতে কল্পনাপ্রসূত, অভ্যাসে আমি এমন একটি পরিস্থিতির মুখোমুখি নই যার মধ্যে একটি সত্যিকারের ইন্টারেক্টিভ প্রোগ্রামের চূড়ান্ত আউটপুট এই আচরণের কারণে হারিয়ে যাবে।

অন্যদিকে, ক্রাই ইউএনআইসিওএস পিটস ফাইল অপ্রচলিত আউটপুটটিকে অবিলম্বে ছুড়ে ফেলে যখন প্রক্রিয়াটি ফাইলের বর্ণনাকারী বন্ধ করে দেয়। আমি Cray এই রিপোর্ট করেছেন এবং তারা একটি ফিক্স কাজ করছে।

কখনও কখনও একটি প্রম্পট এবং একটি প্রতিক্রিয়া, যেমন একটি tty ইন্টারফেস যখন UART সেটিংস পরিবর্তন বা বন্ধ ব্রড হার শুরু / স্টপ বিট জন্য অনুসন্ধান মধ্যে একটি বিলম্ব প্রয়োজন হয়। সাধারণত, এই সব একটি দ্বিতীয় বা দুই জন্য ঘুম প্রয়োজন হয়। ইনপুট পাওয়ার জন্য হার্ডওয়্যার প্রস্তুত না করা পর্যন্ত পুনরায় চেষ্টা করার জন্য আরও জোরালো কৌশলটি রয়েছে। নিম্নলিখিত উদাহরণ উভয় কৌশল ব্যবহার করে:

"গতি 9600 \ r" পাঠান; ঘুম 1 আশা {সময়সীমা {প্রেরণ "\ r"; exp_continue} $ প্রম্পট}

trap -code কোনও কমান্ডের সাথে কাজ করবে না যে Tcl এর ইভেন্ট লুপে বসবে, যেমন ঘুম। সমস্যা হল ইভেন্ট লুপে, Tcl এএসসিঙ্ক ইভেন্ট হ্যান্ডলারগুলি থেকে রিটার্ন কোডগুলিকে বাতিল করে। ফাঁকা কোডের একটি পতাকা সেট করার জন্য একটি সমাধান। তারপর কমান্ড (অর্থাত্, ঘুম) পরে অবিলম্বে পতাকা পরীক্ষা করুন।

Expect_background কমান্ড উপেক্ষা করে-টাইমআউট আর্গুমেন্টগুলি এবং সাধারণভাবে সময়সীমার কোন ধারণা নেই।

& # 34; প্রত্যাশার চিহ্ন & # 34;

প্রত্যাশা সম্পর্কে কিছু বিষয় আছে যে অ স্ববিরোধী হতে পারে। এই বিভাগে কিছু পরামর্শ সঙ্গে এই জিনিস কিছু ঠিক করার চেষ্টা করে।

একটি সাধারণ প্রত্যাশা সমস্যা হল শেল প্রম্পটগুলি কীভাবে চিনতে হয়। যেহেতু এই আলাদাভাবে ভিন্নভাবে মানুষ এবং বিভিন্ন শেল দ্বারা আলাদাভাবে কাস্টমাইজ করা হয়, পোর্টেবল স্বয়ংক্রিয়ভাবে rlogin স্বয়ংক্রিয়ভাবে প্রম্পট না জানা কঠিন হতে পারে। একটি যুক্তিসঙ্গত প্রচলন হল ব্যবহারকারীরা তাদের প্রম্পট (বিশেষত এর শেষে,) পরিবেশের পরিবর্তনশীল EXPECT_PROMPT তে একটি নিয়মিত এক্সপ্রেশন প্রকাশ করে। নীচের কোডটি ব্যবহার করা যেতে পারে। যদি EXPECT_PROMPT অস্তিত্ব না থাকে তবে কোডটি সঠিকভাবে সঠিকভাবে কাজ করার একটি ভাল সুযোগ রয়েছে।

প্রম্পট সেট করুন "(% | | | | | | $ $ $) | # # ডিফল্ট প্রম্পট ধরুন {সেট প্রম্পট $ env (EXPECT_PROMPT)} আশা -re $ প্রম্পট

আমি আশা করছি আপনি নিখুঁত প্যাটার্নগুলি লেখার জন্য উত্সাহিত করবেন যেগুলি আপনি দেখতে যাবেন। এটি পুরো ব্যাপারটি দেখে আগে একটি প্রশ্নের উত্তর দেওয়ার সম্ভাবনা এড়ানো। উপরন্তু, আপনি ভালভাবে তাদের দেখতে আগে প্রশ্ন উত্তর দিতে সক্ষম হতে পারে, আপনি যদি প্রথম উত্তর, আপনার উত্তর প্রশ্ন মাঝখানে ফিরে প্রদর্শিত হতে পারে প্রদর্শিত হতে পারে। অন্য কথায়, ফলস্বরূপ ডায়ালগটি সঠিক হবে কিন্তু সঙ্কুচিত হবে।

সর্বাধিক প্রম্পটগুলির শেষে একটি স্থান অক্ষর অন্তর্ভুক্ত উদাহরণস্বরূপ, ftp থেকে প্রম্পটে 'f', 't', 'p', '>' এবং। এই প্রম্পট মিলে, আপনার প্রতিটি অক্ষরের জন্য অ্যাকাউন্ট অবশ্যই আবশ্যক। এটি একটি সাধারণ ভুল যা ফাঁকা রাখা অন্তর্ভুক্ত নয়। স্পষ্টভাবে ফাঁকা রাখুন।

যদি আপনি X * ফর্মের একটি প্যাটার্ন ব্যবহার করেন, * এক্স এর শেষ থেকে প্রাপ্ত শেষ ফলাফল পর্যন্ত প্রাপ্ত সমস্ত আউটপুট মিলবে। এটি বোধগম্য কিন্তু কিছুটা বিভ্রান্তিকর হতে পারে কারণ "শেষ জিনিস প্রাপ্ত" শব্দটি কার্ণেল এবং ডিভাইস ড্রাইভারের দ্বারা কম্পিউটারের গতি এবং I / O প্রক্রিয়াকরণের উপর নির্ভর করে পরিবর্তিত হতে পারে।

বিশেষ করে, মানুষের বিশাল অংশ (এটোমিক) এ আসার প্রোগ্রাম প্রোগ্রামটি দেখতে পাওয়া যায় যখন আসলে অধিকাংশ প্রোগ্রাম এক সময়ে একটি লাইন আউটপুট উত্পাদন করে। এই অনুমান করা হচ্ছে, পূর্ববর্তী অনুচ্ছেদের প্যাটার্নে * শুধুমাত্র বর্তমান লাইনের শেষের সাথে মিলবে, যদিও এটি আরও বেশি বলে মনে হয়, কারণ ম্যাচটি যে সময়ে প্রাপ্ত হয়েছে সেটিই ছিল সেই সব আউটপুট।

আশা যদি আপনার প্যাটার্ন বিশেষভাবে এটি জন্য অ্যাকাউন্ট না হয় তাহলে আরও আউটপুট আসছে যে বুদ্ধিমান কোন উপায় নেই।

এমনকি লাইন ভিত্তিক বাফারিং উপর নির্ভর করে মূর্খতা। শুধু প্রোগ্রামগুলি বিরলভাবেই বাফারের ধরনের প্রতিশ্রুতি দেয় না, কিন্তু সিস্টেম অপ্রয়োজনীয় আউটপুট লাইনগুলিকে ভেঙ্গে ফেলতে পারে যাতে লাইনগুলি মনে হয় র্যান্ডম স্থানে ভেঙ্গে যায়। সুতরাং, যদি আপনি প্রম্পট এর শেষ কয়েক অক্ষর যখন নিদর্শন লেখার সময় প্রকাশ করতে পারেন, তাই এটি করা বিজ্ঞতার কাজ।

যদি আপনি একটি প্রোগ্রামের শেষ আউটপুটে একটি প্যাটার্নের জন্য অপেক্ষা করছেন এবং প্রোগ্রাম পরিবর্তে অন্য কিছু নির্গত হয়, আপনি সময়সীমার কিওয়ার্ড সাথে এটি সনাক্ত করতে সক্ষম হবে না। কারণ এটি প্রত্যাশার সময়সীমা হবে না - পরিবর্তে এটি একটি eof ইঙ্গিত পাবেন। পরিবর্তে যে ব্যবহার করুন এমনকি আরও ভাল, উভয় ব্যবহার করুন। যে লাইনটি যদি কখনও চারপাশে সরানো হয় তাহলে, আপনি লাইন নিজেই সম্পাদনা করতে হবে না।

Newlines সাধারণত ক্যারেজ রিটার্ন রূপান্তর করা হয়, টার্মিনাল ড্রাইভার দ্বারা আউটপুট যখন linefeed ক্রম। সুতরাং, যদি আপনি একটি প্যাটার্ন চান যা স্পষ্টভাবে দুটি লাইনের সাথে মেলে বলে, printf ("foo \ nbar") থেকে, আপনি "foo \ r \ nbar" প্যাটার্ন ব্যবহার করতে হবে।

একটি অনুরূপ অনুবাদ ঘটেছে যখন ব্যবহারকারী থেকে পড়া, expect_user মাধ্যমে। এই ক্ষেত্রে, আপনি যখন রিটার্ন প্রেস করবেন, এটি একটি নতুন রেখায় অনুবাদ করা হবে। যদি প্রত্যাশা থাকে তবে একটি প্রোগ্রাম যা সেটি টার্মিনালকে কাঁচা মোড (টেলনেটের মতো) সেট করে দেয়, সেখানে একটি সমস্যা হতে পারে, কারণ প্রোগ্রামটি সত্যিকারের রিটার্ন প্রত্যাশা করে। (কিছু প্রোগ্রাম প্রকৃতপক্ষে ক্ষমা করে দেয় যে তারা স্বয়ংক্রিয়ভাবে নতুন লাইনগুলিকে রিটার্ন করবে, কিন্তু অধিকাংশই তা করবেন না।) দুর্ভাগ্যবশত, কোন প্রোগ্রামটি তার টার্মিনালকে কাঁচা মোডে খুঁজে পেতে কোন উপায় নেই।

নতুন লাইনগুলিকে ফেরত দিয়ে ম্যানুয়ালি পরিবর্তনের পরিবর্তে, সমাধান "stty raw" কমান্ডটি ব্যবহার করতে হবে, যা অনুবাদ বন্ধ করবে। উল্লেখ্য, তবে, এর মানে হল যে আপনি আর রান্না করা লাইন-সম্পাদনা বৈশিষ্ট্য পাবেন না।

মিথস্ক্রিয়ভাবে কাঁচা মোডে আপনার টার্মিনাল সেট করে, তাই এই সমস্যাটি তখন উঠবে না।

এটি স্ক্রিপ্ট প্রত্যাশা মধ্যে পাসওয়ার্ড (বা অন্যান্য ব্যক্তিগত তথ্য) সংরক্ষণ করতে প্রায়ই দরকারী। এটি একটি কম্পিউটারে সংরক্ষণ করা হয় যে কোনও কিছু দ্বারা অ্যাক্সেস করার জন্য সন্দেহজনক হয়, কারণ এই সুপারিশ করা হয় না। সুতরাং, আন্তঃক্রমে একটি স্ক্রিপ্ট থেকে পাসওয়ার্ডের জন্য প্ররোচনা একটি আশ্চর্যজনক ধারণা তাদের আংশিক embedding তুলনায়। যাইহোক, কখনও কখনও যেমন এম্বেডিং একমাত্র সম্ভাবনা।

দুর্ভাগ্যবশত, ইউনিক্স ফাইল সিস্টেমের স্ক্রিপ্টগুলি তৈরি করার কোন সরাসরি উপায় নেই যা এক্সিকিউটেবল কিন্তু অপঠিত। সেটগিন শেল স্ক্রিপ্টগুলির সমর্থনকারী সিস্টেমগুলিকে পরোক্ষভাবে এইটিকে অনুকরণ করে:

স্বাভাবিক হিসাবে প্রত্যাশা লিপি (গোপন তথ্য রয়েছে) তৈরি করুন। এটির অনুমোদন 750 (-আরডব্লিউ এক্স-এক্স ---) এবং একটি বিশ্বস্ত গ্রুপের মালিকানাধীন, অর্থাত, একটি গ্রুপ যা এটি পড়ার অনুমতি দেয়। প্রয়োজন হলে, এই উদ্দেশ্যে একটি নতুন গ্রুপ তৈরি করুন। পরবর্তী, অনুমতি হিসাবে একটি / bin / sh স্ক্রিপ্ট তৈরি করুন 2751 (-rwxr -s - x) আগে একই গ্রুপ দ্বারা মালিকানাধীন।

ফলাফলটি একটি স্ক্রিপ্ট যা অন্য কারো দ্বারা চালানো (এবং পড়তে) হতে পারে। যখন চালু করা হয়, এটি প্রত্যাশা লিপিটি রান করে।

& # 34; এছাড়াও দেখুন & # 34;

Tcl (3), libexpect (3)
"অন্বেষণ প্রত্যাশা: অ্যান্টিমটিং ইন্টারেক্টিভ প্রোগ্রামগুলির জন্য একটি Tcl- ভিত্তিক টুলকিট" ডন লিব্স, পিপি। 60২, আই এস এস এ 1-56592-090২, ও রেইলি অ্যান্ড অ্যাসোসিয়েটস, 1995।
"আশা করা যায়: আন্তঃক্রিয়াতে যারা অবিচ্ছিন্ন ফিটনেস কাটা" ডন লিবিস, গ্রীষ্মকালীন 1990 ইউনেসিক কনফারেন্সের কার্যনির্বাহী, অ্যানাহেম, ক্যালিফোর্নিয়ার 11-15 জুন, ২011 তারিখে।
আমি ডন লিবেস "ডটকমকে সিস্টেম অ্যাডমিনিস্ট্রেশন টাস্ক অটোমেট করার আশা করে" ব্যবহার করে 1990 সালের ইউএনএক্সক্স লার্জ ইন্সটলেশন সিস্টেম অ্যাডমিনিস্ট্রেশন কনফারেন্স, কলোরাডো স্প্রিংস, কলোরাডো, অক্টোবর 17-19, 1990।
আমি "Tcl: একটি Embeddable কমান্ড ভাষা" জন Ousterhout দ্বারা, শীতকালীন 1990 USENIX কনফারেন্স, ওয়াশিংটন, ডিসি, জানুয়ারী 22-26, 1990. আমি "আশা করি: ইন্টারেক্টিভ প্রোগ্রাম নিয়ন্ত্রণ জন্য স্ক্রিপ্ট" ডন Libes, কম্পিউটিং সিস্টেম দ্বারা , ভল। 4, নং ২, ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া প্রেস জার্নাল, নভেম্বর 1991। আমি "রিগ্রেশন টেস্টিং অ্যান্ড কনফরমেন্স টেস্টিং ইন্টারেক্টিভ প্রোগ্রামস" ডন লিবেরস, গ্রীষ্মের কার্যনির্বাহী 1992 মার্কিন যুক্তরাষ্ট্র কনফারেন্স, পিপি। 135-144, সান আন্তোনিও, জুন 12-15, 199২. আমি "কিবitz - একসাথে একাধিক ইন্টারেক্টিভ প্রোগ্রাম একসাথে", ডন লিবেরস, সফটওয়্যার - প্র্যাকটিস এবং অভিজ্ঞতা, জন উইলি অ্যান্ড সন্স, ওয়েস্ট সাসেক্স, ইংল্যান্ড, ভল।

২3, নং 5, মে, 1993। আমি "ডেমোক্রেসি ফর টিসিএল অ্যাপ্লিকেশান", ডন লিবেরস, 1993 টিসিএল / টাক ওয়ার্কশপের কার্যনির্বাহী, বার্কলে, সিএ, জুন 10-11, 1993।

লেখক

ডন লিবস, ন্যাশনাল ইনস্টিটিউট অব স্ট্যান্ডার্ড ও টেকনোলজি

প্রাপ্তি স্বীকার

টিসিএল জন্য জন Ousterhout ধন্যবাদ, এবং অনুপ্রেরণা জন্য স্কট পেসলে। প্রত্যাশা এর অটোকানফিগশন কোড জন্য রব Savoye ধন্যবাদ।

ইতিহাস ফাইল প্রত্যাশা অনেক বিবর্তন দায়ের। এটি আকর্ষণীয় পড়া এবং আপনাকে এই সফ্টওয়্যার আরও অন্তর্দৃষ্টি দিতে পারে। এতে উল্লেখ করা লোকেদের ধন্যবাদ যারা আমাকে বাগ সংশোধন করে পাঠিয়েছে এবং অন্যান্য সহায়তা দিয়েছে।

মার্কিন সরকার দ্বারা প্রত্যাশিত নকশা এবং বাস্তবায়নের অংশ হিসাবে দেওয়া হয় এবং সেইজন্য পাবলিক ডোমেইনের মধ্যে। তবে লেখক ও এনআইএসটি এই প্রোগ্রাম এবং ডকুমেন্টেশন বা অংশগুলি ব্যবহার করলে ক্রেডিটটি পছন্দ করবে।