باش بريك ريدلاين على سيجينت
سؤال
وأنا أحاول أن قبض على سيجينت السيطرة + ج داخل حلقة قراءة على مأخذ ولكن كسر أنا أسأل فقط الحصول على معالجتها بعد خط جديد.لذلك عندما كنت السيطرة + ج بلدي تشغيل التطبيق ، لا بد لي من الانتظار لخط جديد للوصول في المقبس قبل فواصل حلقة / مخارج التطبيق
هذا هو الإصدار الأدنى :
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
بالطبع ، هذا ليس سوى حل خام للغاية ، ولا يخفي أي رسائل خطأ صادرة عن أغلفة فرعية منتهية وما إلى ذلك.لكنه يظهر الفكرة ويحل المشكلة التي سألت عنها.لإخفاء رسالة الخطأ المتوقعة وما إلى ذلك.قد ترغب في طرح أسئلة أخرى (أو مجرد البحث عن إجابات معينة بالفعل هنا؛ -)