7
votes

Liste d'impression de toutes les variables d'environnement

J'aimerais imprimer une liste de tous les Variables d'environnement et leurs valeurs. J'ai cherché The Stackoverflow et les questions suivantes se rapprochent mais ne me répondez pas:

lua

0 commentaires

5 Réponses :


5
votes

Les fonctions Standard Lua sont basées sur des fonctions standard C. Il n'existe aucune fonction C-standard pour obtenir toutes les variables d'environnement. Par conséquent, il n'y a pas de fonction standard Lua pour le faire non plus.

Vous devrez utiliser un module comme Luaex , qui fournit cette fonctionnalité.


1 commentaires

@Alexstack: Pas tout à fait. argv fait référence aux arguments de ligne de commande transmis au programme. Envple fait référence aux variables d'environnement, mais elle n'est pas standard.



2
votes

Ce code a été extrait d'une ancienne liaison POSIX.

static int Pgetenv(lua_State *L)        /** getenv([name]) */
{
    if (lua_isnone(L, 1))
    {
        extern char **environ;
        char **e;
        if (*environ==NULL) lua_pushnil(L); else lua_newtable(L);
        for (e=environ; *e!=NULL; e++)
        {
            char *s=*e;
            char *eq=strchr(s, '=');
            if (eq==NULL)       /* will this ever happen? */
            {
                lua_pushstring(L,s);
                lua_pushboolean(L,0);
            }
            else
            {
                lua_pushlstring(L,s,eq-s);
                lua_pushstring(L,eq+1);
            }
            lua_settable(L,-3);
        }
    }
    else
        lua_pushstring(L, getenv(luaL_checkstring(L, 1)));
    return 1;
}


2 commentaires

Eh bien, c'est un moyen de résoudre le problème en utilisant C. Apparemment, il n'y a pas de fonction pure-lua qui le fait. Merci quand même.


@Alexstack, comme mentionné Nicol, il n'y a pas de fonction PURE-LUA car Environ n'est pas Ansi C, Just Posix.



2
votes

Vous pouvez installer le module Lua-Posix. Alternativement, les installations de RedHat ont des routines de POSIX intégrées, mais pour leur permettre, vous devez faire une astuce: xxx

L'astuce consiste à créer une liaison logicielle vers le répertoire "IO" du RPM et à nommer la liaison molle, le même nom de la bibliothèque Lua tentera d'ouvrir. Si vous ne le faites pas, vous obtenez: xxx

ou similaire.


0 commentaires

1
votes
local osEnv = {}

for line in io.popen("set"):lines() do 
  envName = line:match("^[^=]+")
  osEnv[envName] = os.getenv(envName)
end
this would not work in some cases, like "no valid shell for the user running your app"

1 commentaires

Il pourrait également échouer si des noms ou des valeurs variables d'environnement contiennent des nouvelles lignes ou d'autres caractères drôles.



0
votes

une doublure facile 2:

    buf = io.popen("env", '*r')
    output = buf:read('*a')
    print(output) -- or do whatever


0 commentaires