اختبار إعادة توجيه مزدوج
-
30-09-2019 - |
سؤال
ماذا يطبع هذا قذيتك؟
echo foo | while read line; do echo $line; done < <(echo bar)
أتوقع أن يتم تقييمه echo foo | bar
أو foo < <(bar)
, ، كلاهما سيؤدي إلى رسالة خطأ.
في Bash 4.1.5 يبدو أن الأنبوب يتم تجاهله ببساطة:
bar
في داش:
sh: Syntax error: redirection unexpected
المحلول
لا يدعم DASH استبدال العملية (<()
).
السلوك الذي تراه ثابتًا إذا كنت تستخدم بناء الجملة الذي يدعمه كل من القذائف التي تقارنها. جرب هذا:
echo hello | cat < inputfile
يجب أن ترى محتويات "InputFile" وليس "Hello". من عدة قذائف حاولت ، أظهرت Z Shell فقط على حد سواء.
هذا ما يقوله Posix فيما يتعلق بخطوط الأنابيب وإعادة التوجيه:
يجب توصيل الإخراج القياسي لـ Command1 بالإدخال القياسي لـ Command2. يجب اعتبار الإدخال القياسي أو الإخراج القياسي أو كلاهما أمرًا يتم تعيينه بواسطة خط الأنابيب قبل أي إعادة توجيه محددة من قبل مشغلي إعادة التوجيه التي تشكل جزءًا من الأمر (انظر إعادة التوجيه).
أفسر هذا على أنه يعني أنه في حالة المثال أعلاه ، يعين خط الأنابيب stdin cat
ثم إعادة التوجيه يتجاوز ذلك.