سؤال

وأنا أحاول أن قبض على سيجينت السيطرة + ج داخل حلقة قراءة على مأخذ ولكن كسر أنا أسأل فقط الحصول على معالجتها بعد خط جديد.لذلك عندما كنت السيطرة + ج بلدي تشغيل التطبيق ، لا بد لي من الانتظار لخط جديد للوصول في المقبس قبل فواصل حلقة / مخارج التطبيق

هذا هو الإصدار الأدنى :

trap "break" SIGINT SIGHUP SIGTERM
exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3

كيف يمكنني كسر الحلقة على الفور والخروج من التطبيق?

هل كانت مفيدة؟

المحلول

A break ليس الأمر الحقيقي يمكنك تنفيذ أي وقت مضى حيث تريد;انها مجرد بناء نحوي للاحتفال نقطة حيث ترك حلقة المحيطة بها.الخاص بك break لا يحتوي على حلقة محيطة ، لذلك لا معنى له (وهو خطأ: bash: break: only meaningful in a `for', `while', or `until' loop).

تحتاج إلى قتل read الأمر بدلا من ذلك:

trap "killRead" SIGINT SIGHUP SIGTERM

killRead() {
  kill $(cat /tmp/read.pid)
}

exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3 & pid=$!

echo $pid > /tmp/read.pid

wait $pid

بالطبع ، هذا ليس سوى حل خام للغاية ، ولا يخفي أي رسائل خطأ صادرة عن أغلفة فرعية منتهية وما إلى ذلك.لكنه يظهر الفكرة ويحل المشكلة التي سألت عنها.لإخفاء رسالة الخطأ المتوقعة وما إلى ذلك.قد ترغب في طرح أسئلة أخرى (أو مجرد البحث عن إجابات معينة بالفعل هنا؛ -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top