linux যবহ ডোজ বিরতির সমতুল্য লিনাক্স কি?




লিনাক্সের সুবিধা (8)

আমার কাছে একটি ব্যাশ শেল স্ক্রিপ্ট রয়েছে যা আমি ব্যবহারকারীকে একটি কী টিপ না হওয়া পর্যন্ত কার্যকর করতে বিরত রাখতে চাই। DOS এ, এটি "পজিশন" কমান্ডের সাথে সহজেই সম্পন্ন হয়। আমার লিনাক্সের সমতুল্য আমি কি স্ক্রিপ্টে ব্যবহার করতে পারি?


যদি আপনার কেবল একটি লুপ বা স্ক্রিপ্ট থামাতে হয় এবং আপনি যেকোনো কী এর পরিবর্তে Enter টিপতে খুশি হন তবে তার নিজের কাজটি পড়ুন।

do_stuff
read
do_more_stuff

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


কোনও প্যারামিটার ছাড়াই read হবে যদি আপনি এন্টার চাপুন। আপনি কোন কী চাপলে ডস pause কমান্ড চলতে থাকবে। যদি আপনি এই আচরণ চান তাহলে read –n1 ব্যবহার করুন।


এটা চেষ্টা কর:

function pause(){
   read -p "$*"
}

এই ফাংশন bash এবং zsh উভয় ক্ষেত্রে কাজ করে এবং টার্মিনালে I / O নিশ্চিত করে:

# Prompt for a keypress to continue. Customise prompt with $*
function pause {
  >/dev/tty printf '%s' "${*:-Press any key to continue... }"
  [[ $ZSH_VERSION ]] && read -krs  # Use -u0 to read from STDIN
  [[ $BASH_VERSION ]] && </dev/tty read -rsn1
  printf '\n'
}
export_function pause

এটা আপনার মধ্যে রাখা .{ba,z}shrc মহান বিচারপতি জন্য .{ba,z}shrc !


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

echo Press enter to continue; read dummy;

একটি পরিবর্তনশীল read একটি যুক্তি হিসাবে সরবরাহ করা প্রয়োজন মনে রাখবেন।


read এই:

[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$ 

-n1 উল্লেখ করে যে এটি শুধুমাত্র একটি অক্ষরের জন্য অপেক্ষা করে। -r এটি কাঁচা মোডে রাখে, যা প্রয়োজনীয় কারণ অন্যথায়, যদি আপনি ব্যাকস্ল্যাশের মত কিছু চাপেন, তবে এটি পরবর্তী কীটি আঘাত না হওয়া পর্যন্ত নিবন্ধিত হয় না। -p প্রম্পটটি নির্দিষ্ট করে, এতে স্পেস রয়েছে যদি উদ্ধৃত করা আবশ্যক। key যুক্তিটি কেবল তখনই প্রয়োজনীয়, যদি আপনি কী কী চাপেন তা জানতে চান, যার ক্ষেত্রে আপনি $key মাধ্যমে এটি অ্যাক্সেস করতে পারেন।

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

read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
    echo 'A key was pressed.'
else
    echo 'No key was pressed.'
fi

read -n1 পোর্টেবল নয়। একই করতে একটি পোর্টেবল উপায় হতে পারে:

(   trap "stty $(stty -g;stty -icanon)" EXIT
    LC_ALL=C dd bs=1 count=1 >/dev/null 2>&1
)   </dev/tty

read ব্যবহার ছাড়াও, শুধুমাত্র একটি প্রেসের জন্য ENTER প্রম্পট চালিয়ে যেতে পারেন যা আপনি করতে পারেন:

sed -n q </dev/tty

আমি এই উপায়ে অনেকগুলি ব্যবহার করি যা খুব ছোট, এবং তারা @ থেমেমডগু এবং @ জিম সমাধানগুলির মতো, তবে সময়ের সাথে সাথে নীরব মোড সহ।

আমি বিশেষত শেষ ক্ষেত্রে ভালোবাসি এবং ব্যবহারকারীর প্রবেশ না করা পর্যন্ত একটি লুপে চালানো অনেক স্ক্রিপ্টে এটি ব্যবহার করুন

কমান্ড

  • সমাধান লিখুন

    read -rsp $'Press enter to continue...\n'
  • পাল্টা সমাধান (সঙ্গে-ডি $ '\ ই')

    read -rsp $'Press escape to continue...\n' -d $'\e'
  • কোন কী সমাধান (সঙ্গে-এন 1)

    read -rsp $'Press any key to continue...\n' -n 1 key
    # echo $key
  • পূর্বনির্ধারিত পছন্দ সঙ্গে প্রশ্ন (-ii $ 'Y' সহ)

    read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
    # echo $key
  • সময়সীমার সমাধান (সঙ্গে -5)

    read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
  • ঘুম বাড়িয়ে উল্লাস

    read -rst 0.5; timeout=$?
    # echo $timeout

ব্যাখ্যা

-আর কাঁচা মোড নির্দিষ্ট করে, যা "\" বা "^" এর মতো মিলিত অক্ষরগুলিকে অনুমতি দেয় না।

-s নীরব মোড নির্দিষ্ট করে, এবং আমরা কীবোর্ড আউটপুট প্রয়োজন হয় না কারণ।

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

-d $ ' \ e ' ডেলিমিটার চার্টার হিসাবে escappe নির্দিষ্ট করে, তাই বর্তমান এন্ট্রির জন্য চূড়ান্ত চরিত্র হিসাবে, এটি কোনো অক্ষর রাখতে পারে তবে ব্যবহারকারীর টাইপ করা একটি চরিত্র রাখতে সতর্ক থাকুন।

-এন 1 নির্দিষ্ট করে যে এটি শুধুমাত্র একটি অক্ষর প্রয়োজন।

-ই রেডলাইন মোড নির্দিষ্ট করে।

-i $ ' Y ' রেডলাইন মোডে প্রাথমিক পাঠ্য হিসাবে Y উল্লেখ করে।

-T 5 5 সেকেন্ডের সময়সীমা নির্দিষ্ট করে

যদি আপনি ইনপুটটি জানতে চান তবে কীটি সরবরাহ করা হবে, ইন-এন 1 ক্ষেত্রে, টিপ করা হয়েছে এমন কী।

$? শেষ প্রোগ্রামের প্রস্থান কোডটি জানতে পারা, পড়ার জন্য, 142 সময়সীমার ক্ষেত্রে, 0 সঠিক ইনপুট। $ রাখুন? একটি পরিবর্তনশীল যত তাড়াতাড়ি সম্ভব যদি আপনি somes কমান্ডের পরে এটি পরীক্ষা করতে হবে, কারণ সব কমান্ড $ পুনর্লিখন হবে?







shell