autoconf باستخدام sh, أريد شل=باش, كيف يمكنني القوة autoconf استخدام باش ؟

StackOverflow https://stackoverflow.com/questions/161064

  •  03-07-2019
  •  | 
  •  

سؤال

أنا على التوالي autoconf وتكوين مجموعات شل '/bin/sh'.وهذا يخلق مشاكل كبيرة.كيفية فرض شل '/bin/bash' على autoconf?

أنا أحاول الحصول على هذا التوالي على osx, انها تعمل على لينكس.لينكس باستخدام SHELL=/bin/bash.osx الافتراضي /bin/sh.

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

المحلول

ولدي مشاكل مماثلة على سولاريس مع دول مجلس التعاون الخليجي - وأنا أستخدم هذه التقنية 'القياسية':

CONFIG_SHELL=/bin/bash ./configure ...

و(أو، في الواقع، وأنا استخدم / بن / شلن كيني، ولكن وضع CONFIG_SHELL الحياة الفطرية فار يسمح لك أن تقول النصوص autoconf التي قذيفة للاستخدام.)

وراجعت النصي تكوين لبوابة وكلمة المدير العام (أنها حدث ليكون استخراجه) للتأكد من أن هذا لم يكن غريبا دول مجلس التعاون الخليجي الحياة الفطرية فار.

نصائح أخرى

ما هي "مشاكل كبيرة"؟ autoconf يعمل بجد للغاية لإنشاء برنامج نصي تكوين الذي يعمل مع نسبة كبيرة جدا من القذائف. إذا كان لديك مثال على بناء هذا autoconf هو الكتابة ليست المحمولة، يرجى الإبلاغ عنها إلى قائمة autoconf البريدية. من ناحية أخرى، إذا كانت المشاكل التي تعاني هي نتيجة لالخاصة بك كود القشرة في configure.ac لا يجري المحمولة (على سبيل المثال، كنت تستخدم bashisms) ثم الحل هو إما التوقف عن استخدام كود غير محمول أو تتطلب مستخدم لتعيين صراحة SHELL أو CONFIG_SHELL في وقت تكوين.

وهذا يبدو وكأنه المشكلة التي تواجهها في بيئة تكوين المستخدم التوالي. على لينكس، وقد وضعت المستخدم الخاص بك SHELL ل/ بن / سحق، ولكن على OS X يتم تعيين ل/ بن / ش. السيناريو تكوين الناتجة عن autoconf يفعل بعض الاختبارات الأولية للقذيفة كان يعمل تحت ولا يحاول إعادة إكسيك نفسه باستخدام قذيفة مختلفة إذا قذيفة المقدمة تفتقر إلى بعض الميزات. ومع ذلك، إذا كنت إدخال كود القشرة غير المحمولة في configure.ac، فأنت انتهاك واحد للفلسفة الرئيسية للautoconf - أي أن تكوين يجب الكتابات تكون محمولة. إذا كنت تريد حقا أن استخدام bashisms في التعليمات البرمجية قذيفة الخاص بك، فإنك تحتاج إلى المستخدم لتمرير SHELL = / بن / سحق كحجة للنص تكوين. هذا ليس خطأ في autoconf، ولكن سيتم النظر من قبل العديد من أن يكون خطأ في بناء المشروع الخاص بك.

ويفترض Autoconf لحل مشاكل النقل عن طريق توليد السيناريو الذي يمكن تشغيل "في أي مكان". هذا هو السبب في أنه يولد كود غريبة مثل:

if test X$foo = X ; then ...   # check if foo is empty

وبدلا من:

if [ "$x" = "" ] ; then ...

وهذا النوع من التعليمات البرمجية crufty سمحت ربما مرة واحدة هذه البرامج النصية لتشغيل على بعض نظام الألتريكس القديم أو أيا كان.

برنامج نصي تكوين لا تعمل بسبب الخلافات قذيفة يشبه القادمة لسباق الفورمولا 1 مع 10 لترا من الغاز، وثلاثة إطارات احتياطية.

إذا كنت مطورا لبرنامج نصي تكوين مع Autoconf، وأنه حساس لما إذا كانت قذيفة باش أو OSX قذيفة، كنت تفعل شيئا خطأ، أو الشعب Autoconf كسر شيء. لو كان منك، وتحديد كل ما قطع قذيفة تقوم بإضافتها إلى البرنامج النصي عن طريق جعلها المحمولة.

أين قذيفة على ذلك ؟ ما يجري مع تشغيل /bin/sh عندما تريد /bin/bash?

تكوين البرامج النصية تهدف إلى تشغيل في أي مكان حتى على فظيعة مكسورة و غير باش القذائف التي توجد في البرية.

تحرير:ما هي المشكلة بالضبط ؟

آخر تحرير:ربما كنت ترغب في السيناريو إلى إعادة تنفيذ نفسه شيئا من هذا القبيل.ربما عربات التي تجرها الدواب:

if test "$SHELL" = "/bin/sh" && test -x /bin/bash; then
    exec /bin/bash -c "$0" "$@"
fi

وln -f /bin/bash /bin/sh

:-P (لا، انها ليست إجابة خطيرة. الرجاء عدم خرطوم النظام الخاص بك عن طريق القيام بذلك!)

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