/ कुंजी या संयोजन दबाते समय बैश प्रोग्राम को कैसे रोकें? [डुप्लीकेट] - बैश, लूप, सिग्नल

कुंजी या संयोजन दबाते समय बैश प्रोग्राम (जबकि लूप) को कैसे रोकें? [डुप्लिकेट] - बैश, लूप, संकेत

मेरे पास थोड़ी देर का लूप है, मैं इसे रोकना चाहूंगा जब उपयोगकर्ता कीबोर्ड पर "s" अक्षर दबाएगा।

मुझे एक "ट्रैप" और रिश्तेदार सिग्नल का उपयोग करके समस्या का प्रबंधन करना चाहिए, जो कि डिफ़ॉल्ट ब्लॉक द्वारा "ctrl + c" के संयोजन के साथ है, लेकिन मुझे "s" दबाकर समान प्रभाव होना चाहिए।

(मुझे कमांड पढ़ने का उपयोग करने की आवश्यकता नहीं है)

आज्ञाओं को कहाँ रखें?

क्या आप मुझे समझा सकते हैं?

धन्यवाद

कोड:

!/bin/bash

while true

do

echo text text text text

done

उत्तर:

जवाब के लिए 0 № 1

निम्नलिखित क्या है Aserre कहते हैं:

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

keypress=""
while [ "$keypress" != "s" ]; do
echo text text text
keypress="`cat -v`"
done

if [ -t 0 ]; then stty sane; fi

जवाब के लिए 0 № 2

मैं डॉन 't पता है कि तुम क्यों डॉन' टी का उपयोग करना चाहते हैं read जैसा कि यह उतना ही सरल होगा

#! /bin/bash

while :
do
echo "text text text"
read -t 0.3 -n 1 k
[[ "$k" == "s" ]] && break
done