উত্তর:
এই মামলার জন্য বিশেষত একটি কমান্ড তৈরি করা হয়েছে: yes
$ yes | ./script
এই কি আছে আউটপুট সংযোগ হয় yes
এর ইনপুট ./script
। সুতরাং যখন ./script
ব্যবহারকারী ইনপুট জিজ্ঞাসা এটি পরিবর্তে এর আউটপুট পাবেন yes
। এর আউটপুট একটি নতুন লাইন অনুসরণ করে একটি yes
অন্তহীন স্ট্রিম y
। সুতরাং মূলত যদি ব্যবহারকারী y
প্রতিটি প্রশ্নের জন্য প্রবেশ করা হয় ./script
।
যদি আপনি n
হ্যাঁ ( y
) এর পরিবর্তে না ( ) বলতে চান তবে আপনি এটি এটি করতে পারেন:
$ yes n | ./script
নোট করুন যে কয়েকটি সরঞ্জামের yes
উত্তর হিসাবে সর্বদা আগমনের বিকল্প রয়েছে । উদাহরণস্বরূপ এখানে দেখুন: 'অ্যাপ-গেট আপগ্রেড'-এ হ্যাঁ / কোনও প্রম্পটকে বাইপাস করুন
ইনপুট প্রবেশের অন্যান্য পদ্ধতি:
y
আপনার স্ক্রিপ্টটি ঠিক কতটা আশা করে আপনি যদি এটি করতে পারেন তবে আপনি এটি করতে পারেন:
$ printf 'y\ny\ny\n' | ./script
নতুনলাইনগুলি ( \n
) হ'ল প্রবেশ কীগুলি।
printf
পরিবর্তে yes
আপনার ব্যবহার করে ইনপুটটির আরও সূক্ষ্ম দানাদার নিয়ন্ত্রণ রয়েছে:
$ printf 'yes\nno\nmaybe\n' | ./script
মনে রাখবেন যে কিছু বিরল ক্ষেত্রে কমান্ডের ব্যবহারকারীর চরিত্রের পরে এন্টার টিপতে হবে না। সেক্ষেত্রে নিউলাইনগুলি ছেড়ে দিন:
$ printf 'yyy' | ./script
সম্পূর্ণতার জন্য আপনি এখানে একটি নথিও ব্যবহার করতে পারেন :
$ ./script << EOF
y
y
y
EOF
বা যদি আপনার শেল এটি একটি স্ট্রিং সমর্থন করে :
$ ./script <<< "y
y
y
"
অথবা আপনি প্রতি লাইনে একটি ইনপুট দিয়ে একটি ফাইল তৈরি করতে পারেন:
$ ./script < inputfile
যদি কমান্ডটি যথেষ্ট জটিল এবং উপরের পদ্ধতিগুলি আর যথেষ্ট না হয় তবে আপনি প্রত্যাশা ব্যবহার করতে পারেন ।
এখানে একটি সুপার সাধারণ প্রত্যাশিত স্ক্রিপ্টের একটি উদাহরণ রয়েছে:
spawn ./script
expect "are you sure?"
send "yes\r"
expect "are you really sure?"
send "YES!\r"
expect eof
প্রযুক্তিগত নিটপিক:
আপনার প্রশ্নে আপনি যে হাইপোটিকাল কমান্ডের আবেদন করেছেন তা কার্যকর হয় না:
$ ./script < echo 'yyyyyyyyyyyyyy'
bash: echo: No such file or directory
এটি কারণ শেল ব্যাকরণ কমান্ড লাইনের যে কোনও জায়গায় পুনর্নির্দেশ অপারেটরের অনুমতি দেয়। শেলটি যতটা উদাসীন, আপনার অনুমান কমান্ড লাইনটি এই লাইনের সমান:
$ ./script 'yyyyyyyyyyyyyy' < echo
bash: echo: No such file or directory
এর অর্থ ./script
যুক্তি দিয়ে ডাকা হবে 'yyyyyyyyyyyyyy'
এবং স্টিডিন নামের একটি ফাইল থেকে ইনপুট পাবে echo
। ফাইলটি বিদ্যমান না থাকায় বাশ অভিযোগ করে।
cannot enable tty mode on non tty input
। আপনি কি এটির জন্য একটি কার্যনির্বাহী জানতে পারবেন?
printf
ইনস্টলিং run
প্রক্রিয়াটি স্বয়ংক্রিয় করার জন্য একটি ফাইলের সাথে কৌতুকটি চেষ্টা করি তখন যা ঘটেছিল তা হ'ল আমি একটি ত্রুটি বার্তা বলছি Warning: Tried to connect to session manager, None of the authentication protocols specified are supported
এবং স্ক্রিপ্টটি একটি নতুন টার্মিনালে খোলে এবং আমাকে যথারীতি ম্যানুয়ালি আমার ইনপুট প্রবেশ করতে বলে। এটি ডেবিয়ান পথে ঘটছে। কোনও পরামর্শ?
কমান্ডটি ব্যবহার করুন yes
:
yes | script
ম্যান পৃষ্ঠা থেকে অংশ:
NAME
yes - output a string repeatedly until killed
SYNOPSIS
yes [STRING]...
yes OPTION
DESCRIPTION
Repeatedly output a line with all specified STRING(s), or 'y'.
কিছু জিনিস ( apt-get
উদাহরণস্বরূপ) সাইলেন্ট মোডে চলার জন্য বিশেষ পতাকা গ্রহণ করে (এবং ডিফল্ট গ্রহণ করে)। ইন apt-get
এর ক্ষেত্রে, আপনি শুধু এটা একটি পাস -y
পতাকা। এটি যদিও আপনার স্ক্রিপ্টের উপর পুরোপুরি নির্ভর করে।
আপনার যদি আরও জটিল জিনিসের প্রয়োজন হয় তবে আপনি আপনার স্ক্রিপ্টটি একটি প্রত্যাশিত স্ক্রিপ্টে মোড়াতে পারেন। প্রত্যাশা আপনাকে আউটপুট পড়তে এবং ইনপুট প্রেরণের অনুমতি দেয় যাতে আপনি বেশ জটিল জিনিসগুলি করতে পারেন যা অন্যান্য স্ক্রিপ্টিং মঞ্জুরি দেয় না। এখানে এর উইকিপিডিয়া পৃষ্ঠা থেকে পাওয়া উদাহরণগুলির মধ্যে একটি :
# Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier
# in the script.
# Open a telnet session to a remote server, and wait for a username prompt.
spawn telnet $remote_server
expect "username:"
# Send the username, and then wait for a password prompt.
send "$my_user_id\r"
expect "password:"
# Send the password, and then wait for a shell prompt.
send "$my_password\r"
expect "%"
# Send the prebuilt command, and then wait for another shell prompt.
send "$my_command\r"
expect "%"
# Capture the results of the command into a variable. This can be displayed, or written to disk.
set results $expect_out(buffer)
# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof
.sh
শেল স্ক্রিপ্ট দিয়ে এটি ব্যবহার করা যাবে না , তাই না? নাকি কোন উপায় আছে?
শেল স্ক্রিপ্টে আপনি স্প্যানের নিম্নলিখিত কৌশলগুলিও ব্যবহার করতে পারেন, আশা এবং প্রেরণ করতে পারেন
spawn script.sh
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes"
তবে উপরের সিনেরিয়োতে আপনাকে যে শব্দটিটি প্রত্যাশা করছেন তা দিতে হবে যখন আপনি স্ক্রিপ্টটি সম্পাদন করার সময় আরও উদাহরণ নীচের লিঙ্কে যান
ঠিক আছে, এটি খুব মার্জিত সমাধান নাও হতে পারে তবে আপনি যদি নিজের অপশনগুলি একটি পৃথক ফাইলে লিখেন এবং তারপরে স্ক্রিপ্টে একটি ইনপুট হিসাবে পাস করেন তবে এটিও কার্যকর হবে। সুতরাং আপনি যদি আপনার সমস্ত অপশন সহ একটি নতুন ফাইল তৈরি করেন (এই ফাইলটিকে 'বিকল্পগুলি' নামে ডাকা), তবে আপনি সহজেই আপনার স্ক্রিপ্টটি চালাতে ./script.sh < options.in
এবং উপযুক্ত হিসাবে বিভিন্ন বিকল্প ফাইল সম্পাদনা / তৈরি করতে পারবেন।
options.in
ফাইলটি কীভাবে লিখব ? আপনি কি একটি উদাহরণ দিতে পারেন?
আমি ডায়ালগ সহ একটি বাশ স্ক্রিপ্ট লিখছিলাম এবং এটি স্বয়ংক্রিয়ভাবে ঘটানোরও দরকার ছিল। আমি এটি করেছি এবং এটি একটি কবজির মতো কাজ করেছে।
# -Wy force signaturewipe (if exists)
echo "y" | sudo lvcreate -W y -n $lvName -L "$lvSize"G /dev/"$svg" >> $nfsUtilLog
আপনি আপনার স্ক্রিপ্টে এই cat
স্ক্রিপ্টটিতে পাইপযুক্ত একটি পাঠ্য ফাইল থেকে আপনার স্ক্রিপ্টে ব্যবহারকারীর ইনপুট সরবরাহ করতে পারেন bash
:
cat input.txt | bash your_script.sh
আপনার পছন্দসই ব্যবহারকারীর ইনপুটটি আপনার ইনপুট.টিএসটিএল ফাইলে রাখুন, যাই হোক না কেন উত্তর চান - y, n, সংখ্যা, স্ট্রিং ইত্যাদি
-f
বিকল্প নির্দিষ্ট কমান্ডের সাথে ভাল কাজ করে।