[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua as replacement for Bash scripting
- From: Jerome Vuarand <jerome.vuarand@...>
- Date: Tue, 6 Jul 2010 11:52:28 +0200
2010/7/6 Alexander Gladysh <agladysh@gmail.com>:
>> What you can do is introduce some helper code to run external
>> utilities more easily. For example you could put a __index hook on _G
>> (or a module), that would check if a command line utility with the
>> given key exist in the path, and would wrap a call to io.popen in a
>> Lua function, with proper whitespace escaping. For example you could
>> then write :
>
>> local files = find('.', '-name' '*foo*')
>> for _,file in files:match('[^\n]+') do
>> print(stat('%n is a %F', file))
>> end
>
>> Where find and stat are wrappers for the command line tools.
>
> That's a nice idea!
>
> I would put such hook into a separate table though — to avoid name clashes.
>
> Also, how to do piping nicely with this approach?
Instead of calling the function directly, the wrapper could return a
"command" object, that you would have to execute ([[ find('.',
'-name', '*foo*') ]] -> [[ find('.', '-name', '*foo*')() ]]. And you
could put a piping operator in there to chain commands. For example :
local files = (shell.find('.', '-size', 0) .. shell.grep('*foo*'))()
for _,file in files:match('[^\n]+') do
print(shell.stat('%n is a %F', file)())
end
You could also feed some string to the command or command chain,
passed in the last parenthesis pair, that would be inserted as stdin :
local output = ( commandA .. commandB .. commandC ) ( input )
Would be roughly equivalent to :
cat input | commandA | commandB | commandC > output