जवाबों:
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
कुंजी को खोजने और इसे दबाने में सक्षम होंगे , ओ)
read: 1: read: Illegal option -n
आपकी कमांड bash -c 'command && command'
आदि को लपेटना सुनिश्चित हो जाता है, तो उस त्रुटि की संभावना है sh
। मैं यह एक लैंडो रैपर कमांड में कर रहा हूं।
मैं इन तरीकों का उपयोग करता हूं जो बहुत कम हैं, और वे @theunamedguy और @Jim समाधानों की तरह हैं, लेकिन इसके अलावा टाइमआउट और साइलेंट मोड के साथ।
मैं विशेष रूप से पिछले मामले से प्यार करता हूं और इसे बहुत सी लिपियों में उपयोग करता हूं जो उपयोगकर्ता द्वारा दबाए जाने तक लूप में चलता है Enter।
समाधान दर्ज करें
read -rsp $'Press enter to continue...\n'
पलायन समाधान (-d $ '\ e' के साथ)
read -rsp $'Press escape to continue...\n' -d $'\e'
कोई भी महत्वपूर्ण समाधान (एन -1 के साथ)
read -rsp $'Press any key to continue...\n' -n 1 key
# echo $key
प्रश्न के विकल्प के साथ चयन किया गया (-E $ 'Y' के साथ)
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 निर्दिष्ट करता है कि इसे केवल एकल वर्ण की आवश्यकता है।
-e निर्दिष्ट मोड ReadLine।
-i $ ' Y ' वाई को रीडलाइन मोड में प्रारंभिक पाठ के रूप में निर्दिष्ट करता है।
-टी 5 में 5 सेकंड का टाइमआउट निर्दिष्ट किया गया है
मामले में महत्वपूर्ण सेवा आपको इनपुट, इन-एन 1 मामले को जानने की जरूरत है, जिसे कुंजी दबाया गया है।
$? पिछले प्रोग्राम के एग्जिट कोड को जानने के लिए पढ़ें, टाइमआउट के मामले में 142, 0 सही इनपुट। $ रखो? जितनी जल्दी हो सके एक चर में अगर आपको आदेशों के बाद इसका परीक्षण करने की आवश्यकता है, क्योंकि सभी आदेश $ फिर से लिखेंगे?
-s
; man read
और read --help
Ubuntu 10.04.1 LTS पर मदद नहीं की। संपादित करें: 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
OSX पर उसी तरह काम करता है।
यह मेरे लिए लिनक्स के कई स्वादों पर काम करता था, जहां इनमें से कुछ अन्य समाधान नहीं थे (यहां सबसे लोकप्रिय लोगों सहित)। मुझे लगता है कि यह अधिक पठनीय है ...
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
लिए enought होगा प्रेस दर्ज करें ... ।
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
, और टर्मिनल के लिए 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
महान न्याय के लिए रखो !
उपयोग करने के लिए हाँ read
- और इसमें दो जोड़े हैं जो इसे cron
और टर्मिनल दोनों में सबसे अधिक उपयोगी बनाते हैं ।
उदाहरण:
time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "
-N 120 रीड स्टेटमेंट समय को 2 मिनट के बाद बाहर कर देता है ताकि यह अंदर ब्लॉक न हो cron
।
टर्मिनल में यह देखने के लिए 2 मिनट का समय देता है कि rsync
कमांड को निष्पादित करने में कितना समय लगा।
फिर बाद echo
है इसलिए अगली पंक्ति में बाद का बैश प्रॉम्प्ट दिखाई देगा।
अन्यथा यह "जारी ..." के बाद सीधे उसी लाइन पर दिखाई देगा जब Enterटर्मिनल में दबाया जाता है।
"Enter any non-NUL character to continue"
। कुछ कुंजियाँ किसी वर्ण को नहीं भेजती हैं (जैसेCtrl
...) और कुछ एक से अधिक भेजती हैं (जैसेF1
,Home
...)।bash
एनयूएल वर्णों की उपेक्षा करता है।