উত্তর:
read
এই আছে:
user@host:~$ read -n1 -r -p "Press any key to continue..." key
[...]
user@host:~$
-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
Press a key to continue...
তবে নবীন ব্যবহারকারীরাও a
কীটি খুঁজে পেতে এবং এটি টিপতে সক্ষম হবেন ; ও)
command | myscript.sh
বা এর সাথে সমস্যা হবে myscript.sh | command
। সমাধানের জন্য এই উত্তরটি দেখুন ।
read: 1: read: Illegal option -n
আপনার কমান্ড bash -c 'command && command'
ইত্যাদি গুটিয়ে রাখার বিষয়ে নিশ্চিত হন তবে ত্রুটিটি সম্ভবত রয়েছে sh
। আমি ল্যান্ডো র্যাপার কমান্ডে এটি করছি।
আমি এই উপায়গুলি অনেক সংক্ষিপ্তভাবে ব্যবহার করি এবং এগুলি @ থেমেমেডগুই এবং @ জিম সলিউশনগুলির মতো তবে সময়সীমা ও নিঃশব্দ মোড ছাড়াও।
আমি বিশেষ করে গত কেস ভালবাসেন এবং স্ক্রিপ্ট অনেকটা এটি ব্যবহার করে যা ব্যবহারকারী ছাপাখানা পর্যন্ত লুপ রান Enter।
সমাধান লিখুন
read -rsp $'Press enter to continue...\n'
সমাধানের সমাধান (-d $ '\ ই' সহ)
read -rsp $'Press escape to continue...\n' -d $'\e'
যে কোনও মূল সমাধান (-n 1 সহ)
read -rsp $'Press any key to continue...\n' -n 1 key
# echo $key
পূর্বনির্বাচিত পছন্দ সহ প্রশ্ন (-আইই 'ওয়াই' সহ)
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
# echo $key
সময়সীমা সমাধান (-t 5 সহ)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
ঘুম বর্ধিত ওরফে
read -rst 0.5; timeout=$?
# echo $timeout
-r কাঁচা মোড নির্দিষ্ট করে, যা "\" বা "^" এর মতো সম্মিলিত অক্ষরগুলিকে মঞ্জুরি দেয় না।
-s নিঃশব্দ মোড নির্দিষ্ট করে এবং কারণ আমাদের কীবোর্ড আউটপুট লাগবে না।
-p $ ' প্রম্পট ' যা স্পেস দিন এবং অক্ষর পলান থেকে $ 'এবং' মধ্যে হতে হবে তা নির্দিষ্ট প্রম্পট। সতর্কতা অবলম্বন করুন, পালানো অক্ষরগুলির উপকারের জন্য আপনাকে অবশ্যই ডলার প্রতীক সহ একক উদ্ধৃতি প্রদান করতে হবে, অন্যথায় আপনি সাধারণ উদ্ধৃতি ব্যবহার করতে পারেন।
-d $ ' \ e ' এসকেপিকে ডিলিমিটার চরিত্র হিসাবে নির্দিষ্ট করে, সুতরাং বর্তমান প্রবেশের জন্য একটি চূড়ান্ত অক্ষর হিসাবে এটি কোনও অক্ষর স্থাপন করা সম্ভব তবে ব্যবহারকারী যে অক্ষরটি টাইপ করতে পারে সেটিকে রাখার ক্ষেত্রে যত্নবান হন।
-n 1 নির্দিষ্ট করে যে এর জন্য কেবল একটি একক অক্ষর প্রয়োজন।
- আমরা পঠন মোড নির্দিষ্ট করে।
-i Y ' Y ' ওয়াইডকে পঠন মোডে প্রাথমিক পাঠ হিসাবে নির্দিষ্ট করে।
-t 5 5 সেকেন্ডের সময়সীমা নির্দিষ্ট করে
আপনার কী ইনপুট জানতে হবে, -n1 ক্ষেত্রে, কীটি টিপানো হয়েছে তা জানুন।
$? শেষ প্রোগ্রামের প্রস্থান কোড জানতে পরিবেশন করুন, পড়ার জন্য, টাইমআউট করার ক্ষেত্রে 142, 0 সঠিক ইনপুট। Put? ভেরিয়েবলের যত তাড়াতাড়ি সম্ভব আপনার যদি কিছু কমান্ডের পরে এটি পরীক্ষা করা প্রয়োজন, কারণ সমস্ত কমান্ড পুনরায় লেখবে $?
-s
; man read
এবং read --help
উবুন্টু 10.04.1 এলটিএসে সহায়তা করেনি। সম্পাদনা: help read
করেছেন; বাকি অবহেলিত হয়?
read: -i: invalid option
প্রাক্তন হয়েছি । read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
#osx read -rp $'kill-server: Are you sure (Y/n) : ' -d $'Y' key;
পরিবর্তে আমার জন্য কাজ করে। `
-i
উবুন্টুতে পুরোপুরি কাজ করেছি , এছাড়াও আমি জানি না কীভাবে -d
ওএসএক্সে একইভাবে কাজ করা হয়।
এটি আমার জন্য লিনাক্সের একাধিক স্বাদে কাজ করেছে, যেখানে এই অন্যান্য সমাধানগুলির মধ্যে কিছু নেই (এখানে সর্বাধিক জনপ্রিয়গুলি সহ)। আমি মনে করি এটি আরও পাঠযোগ্য ...
echo Press enter to continue; read dummy;
নোট একটি পরিবর্তনশীল একটি আর্গুমেন্ট হিসাবে সরবরাহকৃত করা প্রয়োজন যে read
।
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
status=none
পোর্টেবল হয় না। পরিবর্তে stdout এবং stderr / dev / null এ পুনঃনির্দেশ করুন। read -r line < /dev/tty
জন্য যথেষ্ট হবে এন্টার টিপুন ... ।
settings=$(stty -g); stty raw; dd ...; stty "$settings"
টিটিটি সেটিংস সংরক্ষণ এবং পুনরুদ্ধার করতে নোট করুন ।
tr
সম্পাদনা জিনিসটি খুব কার্যকর হতে পারে?
tr
এর আউটপুটটিকে এটি একটি পাইপ হিসাবে বাফার করবে এবং ইউএস-বহির্ভুত কীবোর্ডগুলির এমন কী রয়েছে যা \1-\177
সীমার বাইরে অক্ষর প্রেরণ করে । dd
এখানে মূর্তিযুক্ত উপায়।
আপনার যদি কেবল একটি লুপ বা স্ক্রিপ্ট বিরতি দেওয়া প্রয়োজন হয় এবং আপনি কোনও কীগুলির পরিবর্তে এন্টার টিপুন খুশি হন, তবে read
কাজটি নিজে থেকেই এটি করবে।
do_stuff
read
do_more_stuff
এটি শেষ ব্যবহারকারী হিসাবে বন্ধুত্বপূর্ণ নয়, তবে আপনি নিজের জন্য একটি দ্রুত স্ক্রিপ্ট লিখছেন এমন ক্ষেত্রে যথেষ্ট হতে পারে এবং ব্যাকগ্রাউন্ডে ম্যানুয়ালি কিছু করার জন্য আপনাকে এটিকে বিরতি দিতে হবে।
এটা চেষ্টা কর:
function pause(){
read -p "$*"
}
এই ফাংশনটি উভয় কাজ করে bash
এবং zsh
, এবং টার্মিনালে নিশ্চিত ইনপুট / আউটপুট:
# 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
মহান বিচারের জন্য রাখুন !
হ্যাঁ ব্যবহার করার জন্য read
- এবং কয়েকটি টুইট রয়েছে যা এটি উভয় cron
এবং টার্মিনালের মধ্যে সবচেয়ে কার্যকর করে তোলে ।
উদাহরণ:
time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "
-N 120 2 মিনিটের পরে পঠন বিবৃতিটি সময় করে দেয় যাতে এটি ব্লক হয় না cron
।
টার্মিনালে এটি rsync
কমান্ডটি কার্যকর করতে কতক্ষণ সময় নেয় তা দেখতে 2 মিনিট সময় দেয় ।
তারপরে echo
পরবর্তীটি তাই পরবর্তী ব্যাশ প্রম্পট পরবর্তী লাইনে উপস্থিত হবে।
অন্যথায় এটি Enterটার্মিনালে চাপলে "চালিয়ে যান ..." পরে সরাসরি একই লাইনে প্রদর্শিত হবে ।
"Enter any non-NUL character to continue"
। কিছু কী কোনও অক্ষর (যেমনCtrl
...) প্রেরণ করে না এবং কিছুগুলি একের বেশি (যেমনF1
,Home
...) প্রেরণ করে ।bash
NUL অক্ষর উপেক্ষা করে।