টাইমআউট প্রত্যাশা, বাশ স্ক্রিপ্টিং এ


13

নিম্নলিখিত স্ক্রিপ্টে আমি কীভাবে "প্রত্যাশার" জন্য টাইমআউট যুক্ত করব? আমি এটি 120 সেকেন্ড হিসাবে সেট করতে চাই।

#!/bin/bash
HOST="localhost"
USER="myuname"
PASS="mypassword"

VAR=$(expect -c "
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")

echo "==============="
echo "$VAR"

উত্তর:


13

expectএর ম্যানপেজ অনুযায়ী 10 সেকেন্ডের ডিফল্ট সময়সীমা । এটি 120 সেকেন্ডে পরিবর্তন করতে, আগে spawn ssh $USER@$HOST, লাইনটি যুক্ত করুন

set timeout 120

এটি করতে

VAR=$(expect -c "
set timeout 120
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")

2

প্রত্যাশার জন্য ম্যান পৃষ্ঠার নিম্নলিখিত সূত্র অনুসারে:

"প্রত্যাশা করুন [[-পটস] প্যাট 1 বডি 1] ... [-পটস] প্যাটন [বডিএন]

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

অন্যান্য সাম্প্রতিক প্রত্যাশার পূর্ববর্তী কমান্ডের প্যাটার্নগুলি স্পষ্টভাবে ব্যবহৃত হয়েছে। অতি সাম্প্রতিক প্রত্যাশা_ পরবর্তী কমান্ডের প্যাটার্নগুলি অন্য কোনও নিদর্শনগুলির পরে স্পষ্টভাবে ব্যবহৃত হয়।

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

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

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


1

@ ডারফকে আপনার প্রশ্নের উত্তর দিয়েছে। রক্ষণাবেক্ষণের জন্য আমি আপনার স্ক্রিপ্টটি রিফ্যাক্টর করব যদিও:

#!/bin/bash
export HOST="localhost"
export USER="myuname"
export PASS="mypassword"

script=<<'END_OF_SCRIPT'
    set timeout 120
    spawn ssh $env(USER)@$env(HOST)
    expect "password:"
    send "$env(PASS)\r"
    expect "\$"
    send "ls\r"
    expect -re "$env(USER).*"
    send "logout"
    expect eof
END_OF_SCRIPT

VAR=$(expect -c "$script")

echo "==============="
echo "$VAR"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.