বাশ স্ক্রিপ্টের উত্তর ইন্টারেক্টিভ প্রম্পটগুলি [সদৃশ] করুন


109

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


এটি "অটোকম্প্লেশন" নয় ... যেমন @ অ্যানুইন্ড বলেছেন, এটি "স্বয়ংক্রিয়তা"
বেনজাইটা

3
এটি yesকরার জন্য ব্যবহারের উদাহরণ : unix.stackexchange.com/questions/47344/…
দ্রোগানস

উত্তর:


65

এটি "স্বতঃ-সমাপ্তি" নয়, এটি স্বয়ংক্রিয়তা। এই জিনিসগুলির জন্য একটি সাধারণ সরঞ্জামকে বলা হয় প্রত্যাশা

আপনি কেবল পাইপিং ইনপুট থেকে এখান থেকে পালাতে পারেন yes


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

তবে Yes | commandসবসময় কাজ নাও করতে পারে। যদি এটি কেবল ইনস্টলেশন উদ্দেশ্যে হয় তবে আমি -yআরও ভাল এবং পছন্দের বিকল্পটি ব্যবহার করে পড়েছি ।
উমেশ কৌশিক

169

সাধারন

echo "Y Y N N Y N Y Y N" | ./your_script

এটি আপনাকে আপনার স্ক্রিপ্টে "Y" বা "N" এর যে কোনও অনুক্রমটি পাস করতে দেয়।


3
আমার যদি কোনও প্রেরণের দরকার হয় N, আমি এই পদ্ধতিটি ব্যবহার করতে পারতাম, তবে আমার কেবল ওয়াইয়ের দরকার ছিল তাই আমি চলে গেলাম yes। খুব খারাপ আমি দুটি উত্তর গ্রহণ করতে পারি না, কারণ সেগুলি উভয়ই সঠিক।
টিজে এল

3
;) আচ্ছা আপনার যদি কিছু প্রেরণের দরকার হয় তবে Nএখনই এটি করার ভাল উপায় রয়েছে।
ফ্যাভিয়ার

2
এটি আমার পক্ষে কাজ করে না; স্পেসগুলি নতুন লাইন হিসাবে গণনা করে না --- উদাহরণস্বরূপ যদি আমি "ওয়াই এন" প্রতিধ্বনিত হয় তবে এটি "Y N"প্রথম প্রম্পটে ইনপুট হিসাবে স্ট্রিং দেয় এবং দ্বিতীয় প্রম্পটে এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে আমাদের স্তব্ধ হয়ে যায়। আমি ফাঁকা স্থানগুলিকে নতুন লাইনে পরিবর্তন করার চেষ্টা করেছি কিন্তু এটি কোনও কাজ করে নি, তবুও প্রম্পটে একটি আক্ষরিক স্ট্রিং দিয়েছে।
অস্থায়ী_ ব্যবহারকারী_নাম ২

52
ব্যবহার করার চেষ্টা করুন printf 'y\ny\ny\n' | ./your_script। আপনি প্রতিটি প্রত্যাশিত প্রবেশের জন্য ম্যানুয়ালি নতুন লাইনটি সন্নিবেশ করছেন।
মজিদ

8
printf '%s\n' Y Y N N Y N Y Y Nআইটেমগুলির মধ্যে নিউলাইনগুলি রাখে তবে একটি বড় ফর্ম্যাট স্ট্রিংয়ের প্রয়োজন ছাড়াই।
চার্লস ডাফি

16

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

cat "input.txt" | ./Script.sh

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

12

যদি আপনার কেবল পাঠানোর জন্য ওয়াই থাকে:

$> yes Y |./your_script

আপনার যদি কেবল এন পাঠাতে হয়:

$> yes N |./your_script

9

আমার পরিস্থিতিতে আমার ওয়াই বা এন ছাড়াই পাঠ্য বা ফাঁকা দিয়ে কিছু প্রশ্নের উত্তর দেওয়া দরকার। আমি আমার পরিস্থিতিতে এটি করার সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছিলাম শেলসক্রিপ্ট ফাইল তৈরি করা। আমার ক্ষেত্রে আমি এটিকে স্বতঃসম্পূর্ণ ডেকে আছি sh

মতবাদ স্কিমা রফতানিকারীর জন্য আমার কিছু প্রশ্নের জবাব দেওয়া দরকার ছিল তাই আমার ফাইলটি এ জাতীয় দেখাচ্ছে।

- এটি কেবল উদাহরণ -

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 testing.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

এই কৌশলটি সম্পর্কে আমি যে জিনিসটি পছন্দ করি তা হ'ল আপনি নিজের উত্তরগুলি কী তা মন্তব্য করতে পারেন এবং EOF একটি ফাঁকা লাইন ব্যবহার করা ঠিক সেটাই (ডিফল্ট উত্তর)। এই প্রশ্নগুলির উত্তর দেওয়ার জন্য এই রফতানিকারী সরঞ্জামটির নিজস্ব জেএসওএন অংশীদার রয়েছে তারপরে দেখা যাচ্ছে, তবে আমি এটি করার পরে বুঝতে পারি =)।

স্ক্রিপ্টটি চালনার জন্য আপনি যে ডিরেক্টরিটি চান সেটি হতে পারে 'sh autocomplete.sh'এবং টার্মিনালে চালানো হবে ।

সংক্ষেপে << EOL & EOF ব্যবহার করে রিটার্ন লাইনের সাথে সংযুক্ত করে আপনি প্রম্পটের প্রতিটি প্রশ্নের উত্তর প্রয়োজন হিসাবে দিতে পারেন। প্রতিটি নতুন লাইন একটি নতুন উত্তর।

আমার উদাহরণটি দেখায় যে কীভাবে মন্তব্যে `চরিত্রটি ব্যবহার করে এটি করা যায় যাতে আপনি প্রতিটি পদক্ষেপ কী তা মনে রাখবেন remember

এই পদ্ধতির অন্যান্য সুবিধাটি নোট করুন আপনি কেবলমাত্র Y বা N এর সাথে আরও উত্তর দিতে পারবেন ... বাস্তবে আপনি ফাঁকা দিয়ে উত্তর দিতে পারেন!

এই কেউ সাহায্য করে আউট আশা করি।


4

এর জন্য একটি বিশেষ বিল্ট-ইন ব্যবহার রয়েছে - ' হ্যাঁ '।

সমস্ত প্রশ্নের একই উত্তর দিয়ে উত্তর দিতে, আপনি চালাতে পারেন

yes [answer] |./your_script

অথবা আপনি আপনার স্ক্রিপ্টের ভিতরে রাখতে পারেন প্রতিটি প্রশ্নের নির্দিষ্ট উত্তর থাকতে পারে


আমি কীভাবে স্ক্রিপ্টের ভিতরে এটি করতে পারি? আমি প্রতিটি প্রশ্নের বিভিন্ন উত্তর নির্দিষ্ট করে বলতে চাইছি
সেনগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.