我在Linux中有一个输出10的shell脚本。
我想在lua中编写一个脚本,它为我的shell脚本输出添加了5。如何使用shell脚本的输出?
这是我试过的 -
print(5 + tonumber(os.execute('./sample')))
这是输出 -
10
lua: temp.lua:2: bad argument #2 to 'tonumber' (number expected, got string)
stack traceback:
[C]: in function 'tonumber'
temp.lua:2: in main chunk
[C]: in ?
答案 0 :(得分:4)
正如@Etan Reisner所说,os.execute返回多个值,但退出代码不是第一个返回值。因此,您必须将值填充到变量中:
local ok, reason, exitcode = os.execute("./sample")
if ok and reason == "exit" then
print(5 + exitcode)
else
-- The process failed or was terminated by a signal
end
顺便说一句,如果你想将新值作为退出代码返回,你可以使用os.exit来实现:
os.exit(5 + exitcode)
编辑:正如您通过评论澄清的那样,您希望阅读流程的输出(标准输出),而不是返回值。在这种情况下,io.popen是您需要的功能:
local file = io.popen("./sample")
local value = file:read("*a")
print(5 + tonumber(value))
但请注意,io.popen为not available on every plattform