refactor parallel code
This commit is contained in:
36
openos/source.lua
Normal file
36
openos/source.lua
Normal file
@@ -0,0 +1,36 @@
|
||||
local shell = require("shell")
|
||||
local process = require("process")
|
||||
|
||||
local args, options = shell.parse(...)
|
||||
|
||||
if #args ~= 1 then
|
||||
io.stderr:write("specify a single file to source\n");
|
||||
return 1
|
||||
end
|
||||
|
||||
local file, open_reason = io.open(args[1], "r")
|
||||
|
||||
if not file then
|
||||
if not options.q then
|
||||
io.stderr:write(string.format("could not source %s because: %s\n", args[1], open_reason));
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
local lines = file:lines()
|
||||
|
||||
while true do
|
||||
local line = lines()
|
||||
if not line then
|
||||
break
|
||||
end
|
||||
local current_data = process.info().data
|
||||
|
||||
local source_proc = process.load((assert(os.getenv("SHELL"), "no $SHELL set")))
|
||||
local source_data = process.list[source_proc].data
|
||||
source_data.aliases = current_data.aliases -- hacks to propogate sub shell env changes
|
||||
source_data.vars = current_data.vars
|
||||
process.internal.continue(source_proc, _ENV, line)
|
||||
end
|
||||
|
||||
file:close()
|
||||
Reference in New Issue
Block a user