سؤال ماذا تفعل التصدير في BASH؟ [مكرر]


ممكن تكرار:
الفرق بين "a = b" و "export a = b" في bash 

من الصعب الاعتراف بذلك ، لكني لم أفهم أبداً ما هو بالضبط export يفعل لمتغير بيئة. أعلم أنه في حالة عدم تصدير متغير ، فأنا لا أراه أحيانًا في عمليات الأطفال ، ولكن أحيانًا يبدو أنني أستطيع ذلك. ما يحدث حقاً عندما أقول

export foo=5

ومتى يجب علي عدم تصدير متغير؟


66
2018-06-16 20:02


الأصل


في ما يلي رابط إلى سؤال مفيد آخر واحد على الأقل حول هذا الموضوع: superuser.com/questions/143413/linux-environment-variables ... بما أنه من المفارقات ، كان هذا السؤال هو السؤال الأول الذي ظهر على Google لاستفساري عن التصدير في bash. - Ogre Psalm33
أيضا: superuser.com/questions/18988/... - Ogre Psalm33
استخدام واحد مشترك هو إضافة export إلى .bashrc / .bash_profile لإنشاء متغيرات عمومية مستمرة مشابهة لـ $HOME. - Evan Plaice
احذر ، هناك ما هو أكثر من هذه القصة في البداية. أدعوك للتحقق من إجابتي. - jasonleonhard


الأجوبة:


من عند man bash:

بيئة

عندما يتم استدعاء برنامج يتم إعطاء مجموعة من السلاسل تسمى   بيئة. هذه قائمة   أزواج اسم القيمة ، من النموذج   اسم = قيمة.

توفر shell عدة طرق للتعامل مع البيئة. على   استدعاء ، شل يمسح بنفسه   البيئة ويخلق المعلمة   لكل اسم يتم العثور عليه تلقائيًا   بمناسبة ذلك للتصدير للطفل   العمليات. الأوامر المنفذة ترث   البيئة. ال export  و    declare -x  أوامر تسمح   المعلمات والوظائف المراد إضافتها   وحذفها من البيئة.   إذا كانت قيمة المعلمة في   يتم تعديل البيئة ، والقيمة الجديدة   يصبح جزءًا من البيئة ،   استبدال القديم. البيئة   الموروثة بأي أمر تم تنفيذه   يتكون من القشرة الأولية   البيئة ، التي قد تكون قيمها   معدلة في وعاء ، أي أقل من أي أزواج   إزالتها من قبل unset  الأمر ، زائد   أي إضافات عن طريق التصدير و    declare -x أوامر.


14
2018-06-16 20:09



IMHO النسخ ولصق مقتطفات من وثائق دون أي جهد إضافي من شرح لا ينبغي أن يكون upvoted. - Artur
هذا المقتطف ليس واضحًا جدًا وبصراحة لم أفهم ما يجري. - Trismegistos
فيArtur: على العكس: إذا كان (مقتطفات من) الوثائق يجيب عن سؤال ، فما من مصحوبة بتوضيحات إضافية. - René Nyffenegger
@ RenéNyffenegger ولكن يبدو ، لا. على الأقل ، لم أحصل عليه حتى أقرأ إجابة من BloodPhilia والتي ينبغي أن تكون علامة على أنها مقبولة. - Vladislav Rastrusny
أعتقد أن النقاط التي قام بها أرتور و Trismegistos هي أن أي شخص يستطيع أن ينسخ العجينة ، وهو ليس دائماً كافياً ، ويوضح إجابة جيدة. لا بأس من نسخ بعض الوثائق أو تقديم رابط ، في الواقع يتم تشجيعه ، ولكن يجب أن يكون هناك بعض التفسير الجيد الإضافي. علاوة على ذلك ، يمكن تجاهل هذا التفسير بسهولة من قبل أشخاص مثل RenéNyffenegger إذا لم يكونوا في حاجة إليه ، ولكن سيكون هناك لمن يستفيدون منه. نحن نحاول جميعًا التعلم ولدينا طرق مختلفة لاكتساب الفهم ، وهذا يساعد على تغطية مجموعة متنوعة من أساليب التعلم وسيحسن من تقييمك. - jasonleonhard


تمرير المتغيرات المصدرة إلى عمليات الطفل ، لا المتغيرات لا المصدرة.


85
2018-06-16 20:08



يمكنك الإشارة إلى أي وثائق لهذا التأثير. أنا أبحث عن معلومات أكثر من ذلك. على سبيل المثال ، هل يحتاج المتغير فقط للتصدير مرة واحدة ، أم أنك تحتاج إلى تصديره بعد كل تغيير ، وما إلى ذلك. - Chas. Owens
يمكنك التحقق من ذلك: superuser.com/questions/143413/linux-environment-variables/... - BloodPhilia
يمكنك التحقق من ذلك عن طريق إضافة شيء إلى مسار (على سبيل المثال PYTHONPATH) ومن ثم لاحظ أنه على الرغم من أنك تستطيع ذلك echo $PYTHONPATH لا يتم التعرف عليه من خلال python أو bash script حتى تقوم أنت export هذا - Kaushik Ghose
لا يبدو هذا الجواب صحيحًا تمامًا أيضًا. قذائف الباش الفرعية ، على سبيل المثال ، هي لعمليات الأطفال (وفقا ل $BASHPID) ومع ذلك يمكنك قراءة المتغيرات غير المصدرة من shell الأصل. دليل بسيط: x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x")  تخميني هو أن هذه حالة خاصة تحدث عندما تكون عملية الطفل عبارة عن قذيفة فرعية. - JepZ


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

عند إنهاء الصدفة ، يتم تدمير بيئته ، ولهذا السبب يتم الإعلان عن متغيرات البيئة وتصديرها عند تسجيل الدخول ، في ملف .bashrc على سبيل المثال


19
2018-06-16 22:21