আমি কীভাবে স্বয়ংক্রিয়ভাবে ব্যাশ স্ক্রিপ্টে উত্তর দেব?


14

আমি বাশ স্ক্রিপ্টের মাধ্যমে কিছু প্রোগ্রাম আনইনস্টল করতে চাই। কমান্ডটি চালানোর পরে, টার্মিনাল আমাকে জিজ্ঞাসা করছে যে আমি নিশ্চিত যে আমি এটি আনইনস্টল করতে চাই। সুতরাং আমার উত্তর দেওয়া দরকার y। আমি এটি স্বয়ংক্রিয়ভাবে করতে এবং y10 সেকেন্ডের বিলম্বের পরে উত্তর দিতে চাই ।

আমি এই উদাহরণটি দিয়েছি কিন্তু এটি কাজ করছে না -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

কোন ধারণা? সেন্টোস 7.2


6
ITYM এর #! /bin/bash -পরিবর্তে#!/usr/bin
স্টাফেন চেজেলাস

uninstallপ্রোগ্রামটি প্যারামিটারগুলি বা কনফিগার স্ক্রিপ্ট গ্রহণ করে কিনা তা পরীক্ষা করে দেখুন । এটি সেভাবে আরও সহজ হবে
ফুলচলভি

1
ওয়েব জুড়ে বিজ্ঞাপনের nauseam জিজ্ঞাসা এবং উত্তর । " এটি কাজ করছে না" সমস্যাটির একটি ভাল ডিক্রিপশন নয়। সম্ভবত আপনি বলতে পারেন যে কীভাবে আপনার সমস্যা অগণিত অন্যের চেয়ে আলাদা।

2
আপনার স্ক্রিপ্টটি আসলে কী করে: চালান uninstallএবং এটি থেকে বেরিয়ে আসার জন্য অপেক্ষা করুন। তারপরে 10 সেকেন্ড ঘুমান। তারপরে স্টাডাউটের প্রতিধ্বনি y\n(যা এখনও টার্মিনালের সাথে সংযুক্ত, কোনও প্রোগ্রামের স্টিডিনের সাথে নয়)
পিটার কর্ডেস

উত্তর:


48

যে কি yesকমান্ড জন্য। এটি yঅনির্দিষ্টকালের জন্য প্রতি লাইনে একের আউটপুট দেয় যাতে হ্যাঁ / কোনও প্রশ্ন জিজ্ঞাসা না করা আদেশগুলিতে এটি পাইপ করা যায়।

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

yসমস্ত প্রশ্নের উত্তর । nসমস্ত প্রশ্নের উত্তর দিতে , yesসঙ্গে প্রতিস্থাপন yes n। এর পূর্বনির্ধারিত মিশ্রণের জন্য yএবং এর সাথে nআপনি প্রতিস্থাপন করতে পারেন yes:

printf '%s\n' y n n y y n...

বা এটি চালান:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

আপনার যদি 10 সেকেন্ডের আগে পড়ার জন্য উত্তরটি না পাওয়া দরকার হয় তবে আপনি তা করতে পারেন:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

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

uninstallকমান্ডটি ধরে নিয়েছে তারা প্রতিটি উত্তরকে তার স্ট্যান্ডার্ড ইনপুট থেকে এক লাইন ইনপুট হিসাবে পাঠ করে।

আরও জটিল ক্ষেত্রে, যেখানে কমান্ডটি সরাসরি টিটি ডিভাইস থেকে উত্তরগুলি পড়ে বা যেখানে আপনাকে শর্তসাপেক্ষে উত্তরগুলি খাওয়ানো প্রয়োজন (উদাহরণস্বরূপ কমান্ড আউটপুটগুলির উপর ভিত্তি করে), সেখানে আপনি যেমন expectবা zshএর মতো জিনিস ব্যবহার করতে চান zpty

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


ধন্যবাদ! এটি কেবলমাত্র একটি প্রশ্নের জন্য আমাদের জবাব দিতে হবে সে ক্ষেত্রে এটি ঠিক। উদাহরণস্বরূপ আমাদের যদি 20 টি প্রশ্নের উত্তর দিতে হয় তবে কী হবে?
শ্যালেভ সেনাসন

@ শ্যালেভ, সম্পাদনা দেখুন।
স্টাফেন চেজেলাস

ধন্যবাদ! সুতরাং আমি যদি ইন্টারজারের (2 উদাহরণস্বরূপ) এর মতো অন্য মানগুলি লিখতে চাই তবে আমাকে "y" এর পরিবর্তে এটি প্রতিস্থাপন করতে হবে? printf '% s \ n' ynnyyn 2 3 ny | / অপ্ট / MNG / MNGVIEWHP / ফে / আনইনস্টল
Shalev Sason

হ্যাঁ, এটি ধারণা।
স্টাফেন চেজেলাস

3
@ শ্যালেভসন, echo "y"প্রতিবারের মতো আমি যে সমস্ত সমাধান দিয়েছি, সেগুলিতে আমরা লিখি y<newline>, আপনাকে অনুকরণের yপরে চাপার অনুকরণ করে write আপনি যদি একা এন্টার টিপে অনুকরণ করতে চান তবে এটি একটি খালি লাইন খাওয়ানো হবে, সুতরাং printf '%s\n' y n '' 2 3( ''খালি রেখাটি কোথায় )।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.