diff options
| author | ruki <[email protected]> | 2017-09-14 23:43:05 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-09-14 16:18:35 +0800 |
| commit | 96061942a778d1acf1893d2da0d0b87064ad4f7d (patch) | |
| tree | 1aa7850293991b1308ba0ad03e2f150b7c223010 | |
| parent | 2b04f9efa2c5e4942338826d244bc8831b0bc5f7 (diff) | |
inherit more envars for sudo
| -rw-r--r-- | xmake/modules/privilege/sudo.lua | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/xmake/modules/privilege/sudo.lua b/xmake/modules/privilege/sudo.lua index 62b9ca881..940dec365 100644 --- a/xmake/modules/privilege/sudo.lua +++ b/xmake/modules/privilege/sudo.lua @@ -26,6 +26,20 @@ import("core.base.option") import("detect.tools.find_sudo") +-- some inherited environment variables +function _envars(escape) + local names = {"PATH", "XMAKE_STATS", "COLORTERM"} + local envars = {"env"} + for _, name in ipairs(names) do + local value = os.getenv(name) + if escape and value then + value = "\"" .. (value:gsub("\"", "\\\"")) .. "\"" + end + table.insert(envars, name .. "=" .. (value or "")) + end + return envars +end + -- sudo run command with administrator permission -- -- .e.g @@ -37,19 +51,8 @@ function _sudo(runner, cmd, ...) local sudo = find_sudo() assert(sudo, "sudo not found!") - -- get current path environment - local pathenv = os.getenv("PATH") - if pathenv and #pathenv > 0 then - - -- handle double quote - pathenv = pathenv:gsub("\"", "\\\"") - - -- run it with administrator permission and preserve parent environment - runner(sudo .. " env PATH=\"" .. pathenv .. "\" " .. cmd, ...) - else - -- run it with administrator permission - runner(sudo .. " " .. cmd, ...) - end + -- run it with administrator permission and preserve parent environment + runner(sudo .. " " .. table.concat(_envars(true), " ") .. " " .. cmd, ...) end -- sudo run command with administrator permission and arguments list @@ -64,7 +67,7 @@ function _sudov(runner, program, argv) assert(sudo, "sudo not found!") -- run it with administrator permission and preserve parent environment - runner(sudo, table.join("env", "PATH=" .. os.getenv("PATH"), program, argv)) + runner(sudo, table.join(_envars(), program, argv)) end -- sudo run lua script with administrator permission and arguments list |
