Domanda

Ho un programma C che stampa ogni variabile d'ambiente, il cui nome è dato da stdin. Stampa variabili come $ PATH, $ USER ma non vede le variabili ambientali che io definisco nella shell di Linux ... Ad esempio, in bash definisco my= 4 e mi aspetto che il programma restituisca 4 quando fornisco l'input "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;
}

Cosa posso fare per migliorare i risultati di getenv? Voglio che mi mostri tutte le variabili ambientali con tutte le eredità dalla shell di Linux. Grazie ..

È stato utile?

Soluzione

Esistono due modi:

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

Ciascuno di questi metodi ha lo stesso effetto, ma attraverso meccanismi diversi.

  1. Questo metodo è specifico per la shell che stai utilizzando, sebbene funzioni in questo modo nella maggior parte delle shell tipiche (le varianti della shell Bourne; le shell derivate da csh sono di nuovo diverse). Questo prima imposta una variabile di shell , poi la esporta in una variabile d'ambiente , quindi esegue il programma. Su alcune shell, puoi abbreviarlo come export my=4. La variabile rimane impostata dopo l'esecuzione del programma.

  2. Anche questo metodo dipende dalla tua shell. Questo imposta la variabile d'ambiente my temporaneamente per questa esecuzione di ./program. Dopo l'esecuzione, my non esiste (o ha il suo valore originale).

  3. Questo utilizza il programma env per impostare la variabile d'ambiente prima di eseguire il programma. Questo metodo non dipende da una particolare shell ed è il più portabile. Come il metodo 2, imposta temporaneamente la variabile di ambiente. In effetti, la shell non ha mai nemmeno saputo che my era impostato.

Altri suggerimenti

Se non hai generato un codice tag, è solo una variabile di shell, non una variabile di ambiente.Utilizza export o export my=4.

Questo non ha nulla a che fare con C o getenv.Se si genera un codice tag nella shell, è stata definita una variabile di shell locale.Per renderla una variabile d'ambiente, esegui my=4.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top