سؤال

لدي برنامج C الذي يطبع كل متغير بيئي، والذي يُعطى اسمه بواسطة stdin.يقوم بطباعة متغيرات مثل $PATH و$USER ولكنه لا يرى المتغيرات البيئية التي أعرفها بنفسي في Linux Shell...على سبيل المثال، في bash قمت بتعريف my=4، وأتوقع أن يقوم البرنامج بإرجاع 4 عندما أقوم بإدخال "my".

int main  () {
  char * key = (char * )malloc(30);

  scanf("%s", key);

  if(getenv(key) != NULL)
    printf("%s\n", getenv(key));
  else
    printf("NULL\n");

  return 0;
}

ماذا يمكنني أن أفعل لتحسين نتائج getenv؟أريد أن يُظهر لي جميع المتغيرات البيئية مع جميع الميراث من Linux Shell.شكرًا لك..

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

المحلول

هناك طريقتان:

  1. my=4; export my; ./program
  2. my=4 ./program
  3. env my=4 ./program

ولكل من هذه الطرق نفس التأثير، ولكن من خلال آليات مختلفة.

  1. هذه الطريقة خاصة بالصدفة التي تستخدمها، على الرغم من أنها تعمل بهذه الطريقة في معظم الأصداف النموذجية (متغيرات Bourne Shell؛تختلف الأصداف المشتقة من csh مرة أخرى).يقوم هذا أولاً بتعيين أ متغير القشرة, ، ثم يصدره إلى ملف متغيرات البيئة, ، ثم يقوم بتشغيل البرنامج الخاص بك.في بعض الأصداف، يمكنك اختصار هذا كـ export my=4.يبقى المتغير مضبوطًا بعد تشغيل البرنامج.

  2. تعتمد هذه الطريقة أيضًا على الصدفة الخاصة بك.هذا يحدد my متغيرات البيئة مؤقتا لهذا التنفيذ ./program.بعد تشغيل، my غير موجود (أو له قيمته الأصلية).

  3. يستخدم هذا env برنامج لتعيين متغير البيئة قبل تشغيل البرنامج.هذه الطريقة هي لا يعتمد على أي قذيفة معينة، وهو الأكثر قابلية للحمل.مثل الطريقة الثانية، يقوم هذا بتعيين متغير البيئة مؤقتًا.في الواقع، لم تعرف الصدفة ذلك أبدًا my تم تعيين.

نصائح أخرى

إذا لم تفعل ذلك export فهو إذن مجرد متغير Shell، وليس متغير بيئة.يستخدم export my=4 أو my=4; export my.

هذا ليس له علاقة بـ C أو رمز الترقيم العام.إذا قمت بعمل كود ترميز عام في الغلاف ، فقد حددت متغير صدفة محلي.لجعل ذلك متغير بيئة ، قم بعمل كود ترميز عام.

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