سؤال

ماذا يطبع هذا قذيتك؟

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 ثم إعادة التوجيه يتجاوز ذلك.

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