summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-09-14 23:43:05 +0800
committerruki <[email protected]>2017-09-14 16:18:35 +0800
commit96061942a778d1acf1893d2da0d0b87064ad4f7d (patch)
tree1aa7850293991b1308ba0ad03e2f150b7c223010
parent2b04f9efa2c5e4942338826d244bc8831b0bc5f7 (diff)
inherit more envars for sudo
-rw-r--r--xmake/modules/privilege/sudo.lua31
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